标题:
自己写的一个矩阵键盘控制数码管得程序
[打印本页]
作者:
961042558
时间:
2020-6-9 19:59
标题:
自己写的一个矩阵键盘控制数码管得程序
大家可以参考一下
单片机源程序如下:
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit seg_sel=P1^4;
sbit bit_sel=P1^5;
#define DATA P0
u8 code seg_table[]= //数据表格
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,
};
u8 code bit_table[]=
{
0x10,0x20,0x40,0x80,
0x01,0x02,0x04,0x08,
};
void delay(u16 num) //延时程序
{
u16 x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--)
{
;
}
}
void display_led(u8 which_bit, u8 which_number) //数码管显示程序
{
bit_sel = 1;
DATA = bit_table[which_bit];
bit_sel = 0;
//delay(200);
seg_sel = 1;
DATA = seg_table[which_number];
seg_sel=0;
delay(200);
}
u8 key_scan (void) //编码程序
{
u8 temp,temp2;
P2=0xf0; //输出
temp=P2; //读入P2值
if(temp!=0xf0)
{
delay(50); //消抖
temp=P2;
if(temp!=0xf0)
{
temp2=temp&0xf0; //保留高四位
P2=0x0f; //输出
delay(10); //使电平值充分读入
temp=P2;
temp2 |=temp; //保留低四位
return temp2;
}
//while(P2!=0x0f);
}
}
u8 encode(u8 cod) //解码程序
{
u8 num;
switch(cod)
{
case 0xee : num=0 ; break;
case 0xde : num=1 ; break;
case 0xbe : num=2 ; break;
case 0x7e : num=3 ; break;
case 0xed : num=4 ; break;
case 0xdd : num=5 ; break;
case 0xbd : num=6 ; break;
case 0x7d : num=7 ; break;
case 0xeb : num=8 ; break;
case 0xdb : num=9 ; break;
case 0xbb : num=10; break;
case 0x7b : num=11; break;
case 0xe7 : num=12; break;
case 0xd7 : num=13; break;
case 0xb7 : num=14; break;
case 0x77 : num=15; break;
default : break;
}
return cod;
}
void main(void)
{
u8 num,cod;
P0 = 0xff;
P1 = 0xff;
seg_sel = 0;
bit_sel = 0;
while(1)
{
cod=key_scan(); //判断和编码
num=encode(cod); //解码
display_led(1,num); //显示
}
}
复制代码
所有程序51hei提供下载:
矩阵数码管2.zip
(30.5 KB, 下载次数: 7)
2020-6-9 19:59 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2020-6-10 03:13
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1