本周主要学习了单片机点阵键盘部分 可以通过代码实现显示图形,和图形动态移动及一些简单图形形成的动画。
点阵知识和数码管有一定的关联,可以合理运用其之间的联系。
最后简单实现哭笑脸的代码如下:
#include
#include"Delay.h"
#include"MatrixLED.h"
unsigned char code Animation[]={
0x3c,0x42,0xa9,0x85,0x85,0xa9,0x42,0x3c,
0x3c,0x42,0xa1,0x85,0x85,0xa1,0x42,0x3c,
0x3c,0x42,0xa5,0x89,0x89,0xa5,0x42,0x3c,
};
void main()
{
unsigned char i,Offset=0,Count=0;
MatrixLED_Init();
while(1)
{
for(i=0;i<8;i++)
{
MatrixLED_ShowColumn(i,Animation[i+Offset]);
}
Count++;
if(Count>20)
{
Count=0;
Offset+=8;
if(Offset>16)
{
Offset=0;
}
}
}
}
注释:其中有部分代码进行了编程化处理,有需要可以私我。
同时,又在平常通过代码实现了简单的两位数的加减乘除运算。
51单片机计算器代码如下:
#include
#include"delay.h"
#include"LCD1602.h"
#include"MatrixKey.h"
unsigned int i=1;
//unsigned int num1;
unsigned int a[10];
unsigned char KeyNumber1;
int jisuan(unsigned int a[])
{
unsigned int num;
unsigned char i,j;
i=a[1]*10+a[2];
j=a[4]*10+a[5];
switch(a[3])
{
case 11 : num=i+j;break;
case 12 : num=i-j;break;
case 13 : num=i*j;break;
case 14 : num=i/j;break;
}
return num;
}
void main()
{
LCD_Init();
while(1)
{
KeyNumber1=MatrixKey();
if(KeyNumber1)
{
switch(KeyNumber1)
{
case 1 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=1; break;
case 2 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=2;break;
case 3 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=3;break;
case 4 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=4;break;
case 5 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=5;break;
case 6 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=6;break;
case 7 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=7;break;
case 8 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=8;break;
case 9 : LCD_ShowNum(1,i,KeyNumber1,1);a[i]=9;break;
case 10 : LCD_ShowNum(1,i,KeyNumber1-10,1);break;
case 11 : LCD_ShowChar(1,i,'+');a[i]=11;break;
case 12 : LCD_ShowChar(1,i,'-');a[i]=12;break;
case 13 : LCD_ShowChar(1,i,'*');a[i]=13;break;
case 14 : LCD_ShowChar(1,i,'/');a[i]=14;break;
case 15 : LCD_ShowChar(1,i,'='); LCD_ShowNum(1,i+1,jisuan(a),4); break;
}
i+=1;
}
}
}
这个是个简陋计算器,只能进行一次运算,因为没有设置归零键,感兴趣的朋友可以设置好和我分享,同时这也进行了编程模块化处理,需要私信我。
大致说明一下 其中矩阵键盘1-9就代表其数字,10代表0,11代表‘+’,12代表‘-’,13代表‘*’,14代表‘/’,15代表‘=’。
本周大致学习内容,还有零零碎碎不细说。