标题:
单片机矩阵键盘输入并显示 仿真电路加c51程序
[打印本页]
作者:
huihui123
时间:
2016-1-13 17:06
标题:
单片机矩阵键盘输入并显示 仿真电路加c51程序
1.png
(19.35 KB, 下载次数: 190)
下载附件
2016-1-13 22:23 上传
0.png
(27.74 KB, 下载次数: 181)
下载附件
2016-1-13 22:23 上传
仿真电路加 c程序下载:
矩阵键盘.zip
(26.45 KB, 下载次数: 21)
2016-1-13 17:04 上传
点击文件名下载附件
下载积分: 黑币 -5
源程序代码预览:
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit seg_sel=P1^4;
sbit bit_sel=P1^5;
#define DATA P0
u8 seg_tab[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,
};
u8 bit_tab[]={
0x80,0x40,0x20,0x10,
0x08,0x04,0x02,0x01,
};
void delay(unsigned int num)
{
unsigned int x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);//延时1ms
}
void display_led(u8 which_bit,u8 which_numbe)
{
bit_sel=1;//D[7-0]=Q[7-0]P1^4片选信号锁存器1
DATA=bit_tab[which_bit];//DATA=P0输出which_bit8位
bit_sel=0;//BIT[7-0]=0x80
delay(1);
seg_sel=1;//P1^5片选信号锁存器2启动
DATA=seg_tab[which_numbe];//P0口输出which_numbe8位
seg_sel=0;
delay(1);
}
u8 _key_scan (void)//按键识别函数
{
u8 temp,temp2;
P2=0xf0;//让P2输出0xf0
temp=P2;//读入P2的值
if(temp!=0xf0)//当P2不等于0xf0
{
delay(5);//延迟5ms
temp=P2;//在读入P2值
if(temp!=0xf0)//如果P2不等于0xf0
{ //说明有按键按下
temp2=temp&0xf0;//取出P2口高4位
P2=0x0f;//在P2=0x0f
delay(1);
temp=P2;//读入P2口值
temp2=temp2|temp;//保留低4位并
return temp2;
}//while(P2!=0xf0);//等待 //并与取出的高4位与
}
}
u8 encolde(u8 cod)//解码函数
{
u8 num;
switch(cod)
{
case 0xee:num=0;break;//11101110
case 0xde:num=1;break;//11011110
case 0xbe:num=2;break;//10111110
case 0x7e:num=3;break;//01111110
// case 0xed: num=4; break;//11101101
case 0xed:num=4;break;
case 0xdd:num=5;break;//11011101
case 0xbd:num=6;break;//10111101
case 0x7d:num=7;break;//01111101
case 0xeb:num=8;break;//11101011
case 0xdb:num=9;break;//11011011
case 0xbb:num=10;break;//10111011
case 0x7b: num = 11; break;//01111011
case 0xe7: num = 12; break;//11100111
case 0xd7:num=13;break;//11010111
case 0xb7:num=14;break;//10110111
case 0x77:num=15;break;//01110111
default : break;//无影响
}
return num;
}
void main (void)
{
u8 cod, num;
P0=0xff;
P1=0xff;//初始化P1;P2
seg_sel=0;//IE禁止 锁存
bit_sel=0;
while(1)
{
cod=_key_scan();
num=encolde(cod);
display_led(1,num);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1