学习单片机的日记

嵌入式系统 时间:2016-11-30来源:网络
void display(uchar aa,uchar bb,uchar cc,uchar bai ,uchar shi,uchar ge)

{
dula=1;
P0=table[aa];
dula=0;
P2=0;
delay(5);

dula=1;
P0=table[bb];
dula=0;
P2=1;
delay(5);
dula=1;
P0=table[cc];
dula=0;
P2=2;
delay(5);
dula=1;
P0=table[bai];
dula=0;
P2=3;
delay(5);

dula=1;
P0=table[shi];
dula=0;
P2=4;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P2=5;
delay(5);


}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}



三月31日:今天学完矩阵键盘,终于会编了,弄了好久。。。。(今天开始记录思想,帮我加强记忆并自己再理解一遍)

#include /reg52.h是头文件,包含了下列关键字
#define uint unsigned int /定义无符号型整数
#define uchar unsigned char /定义无符号型字符型
sbit dula=P3^7; /数码管的段是由P3.7引脚控制,位声明下
sbit wela=P2; /数码管的位选是由P2引脚控制,东流电子的板子位选是由译码器控制
uchar temp,num;

void delay(uint z); /延时函数声明

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, /数码管的数组
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main() /主函数
{
dula=1; /首先将数码管不显示,段选是由锁存器控制,将锁存器赋值1打开锁存器,
P0=0; / 往里面输入数据再赋值0关闭锁存器
dula=0;
P2=0; /我的板子的数码管是由译码器控制,通过向P2口输入不同的值进而控制不同数码管,0代表第一个数码管
while(1) /主循环,while语句当()里的值为1是一直循环{ }里的语句,不为1则跳出语句
{
P1=0xfe; /如上图所示P1指的是第一行键盘,矩阵键盘的检测是给除了第一行赋值0外全部赋值为1,也就是111111
temp=P1; 10,再将P1值赋给temp,让后temp和0xf0(11110000)与(逻辑与)原理是:先扫描第一行,将其他端
temp=temp&0xf0; /口赋值1,当有按键按下时有一列为0,列是在高四位如果是第一个键按下就是0111 0111和0xf0与下就不为0xf0
if(temp!=0xf0) /如果temp不为0xfo(就相当于有按键被按下)
{
delay(10); 延时消抖
temp=P1; 再将P1值赋给temp
temp=temp&0xf0; 再和0xf0逻辑与
if(temp!=0xf0) 再判断是否按键
{
temp=P1; 将P1值重新赋给temp
switch(temp) swith语句是多条件语句,()中temp是表达式,case(表达式):对应语句,。break是停止
{ switch语句跳出
case 0xee:num=1; 如果是按第一个键就在数码管上显示0(为啥不是1?下面解释)
break;
case 0xde:num=2; 如果按第一行第二个键在数码管上显示1
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
dula=1;
P0=table[num-1]; 数码管显示[ ]中是上面声明数组中的值,num-1对应数组的值(num为1则代表数组的0)
dula=0;
}
}
P1=0xfd;
temp=P1; 以下就是不同行数的检测,检测第二行就给P1.2赋值0,改变下P1的值和num值就可以进行第
temp=temp&0xf0; 二行以及第三第四行的键盘是否按下
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xfe)
{
temp=P1;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xfe)
{
temp=P1;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P1;
temp=temp&0xf0;
if(temp!=0xfe)
{
temp=P1;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
dula=1;
P0=table[num-1];
dula=0;
}
}

}
}
1 2 3

关键词: 单片机日

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版