您好,欢迎来到维修师平台,我们专注打造家庭维修、清洗、安装、拆装等一站式服务平台

按键控制数码管显示0-9—51单片机利用矩阵按键控制数码管显示0-9数字。。。救救我吧,我快疯了。

2020-11-25 03:55:01 来源: 家电维修服务中心 分类:数码维修
22 4

#include

unsigned char code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x10};

unsigned char t=0;

unsigned char i=0;

void Delay(unsigned char i)

{

unsigned char j;

for(; i>0; i--)

for(j=110; j>0; j--);

}

void DisplayLED(unsigned char n)

{

P0=table[n];

}

void Keycan() //判断 矩阵键盘是否被按下

{

unsigned char tmp, key;

P2=0xfe; //第四列

tmp=P2;

tmp=tmp&0xf0;

if(tmp=0xf0)

{

Delay(10); //

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

tmp=P2;

switch(tmp)

{

case 0xee: TR0=1; // 启动定时器T0

break;

case 0xde: key=8; //

break;

case 0xbe: key=4; /

break;

}

while(tmp!=0xf0)

{

tmp=P2;

tmp=tmp&0xf0;

}

if(tmp!=0xee)

{

DisplayLED(key);

}

}

}

P2=0xfd; //第三列

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

Delay(10); //

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

tmp=P2;

switch(tmp)

{

case 0xed: TR0=0, key=i; // 停止定时器T0

break;

case 0xdd: key=7; //

break;

case 0xbd: key=3; //

break;

}

while(tmp!=0xf0)

{

tmp=P2;

tmp=tmp&0xf0;

}

DisplayLED(key);

}

}

P2=0xfb; //第二列

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

Delay(10); //

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

tmp=P2;

switch(tmp)

{

case 0xeb: key=0 ; //

break;

case 0xdb: key=6; //

break;

case 0xbb: key=2; //

break;

}

while(tmp!=0xf0)

{

tmp=P2;

tmp=tmp&0xf0;

}

DisplayLED(key);

}

}

P2=0xf7; //第一列

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

Delay(10); //

tmp=P2;

tmp=tmp&0xf0;

if(tmp!=0xf0)

{

tmp=P2;

switch(tmp)

{

case 0xe7: key=9 ; //

break;

case 0xd7: key=5; /

break;

case 0xb7: key=1; //

break;

}

while(tmp!=0xf0)

{

tmp=P2;

tmp=tmp&0xf0;

}

DisplayLED(key);

}

}

}

void main()

{

TMOD=0x01;

EA=1;

ET0=1;

TR0=1;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

while(1)

{

Keycan();

if(t==20)

{

t=0;

P0=table[i];

Delay(1000);

i++;

if(i==10)

{

i=0;

}

}

}

}

void TimerLED() interrupt 1 using 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t++;

}

拓展知识:

单片机程序求修改,实现按键控制数码管0-9,急!!!

#include

unsigned int num,a;

sbit key0=P1^0;

sbit key1=P1^1;

sbit key2=P1^2;

sbit key3=P1^3;

bit flag;

unsigned char code led_code[20] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay(unsigned char i)

{

unsigned char j;

for(;i>0;i--) for(j=110;j>0;j--);

}

void keyscan()

{

/*实现加法功能*/

if(key0==0) {

delay(7);

if(key0==0) {

num++;

if(num==10) num=0;

while(key0==0);

}

}

/*实现减法功能*/

if(key1==0) {

delay(7);

if(key1==0) {

num--;

if(num==-1) num=9;

while(key1==0);

}

}

/*实现清零功能*/

if(key2==0) {

delay(7);

if(key2==0) {

num=0;

while(key2==0);

}

}

/*实现定时器1方式1定时1S使得数码管加1显示功能*/

if(key3==0) {

delay(7);

if(key3==0) {

flag = ~flag;

while(key3==0);

}

}

}

void T1_ini()

{

TMOD=0X10;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

ET1=1;

TR1=1;

}

void timer1() interrupt 3

{

a++;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

}

void display()

{

P3=led_code[num];

}

void main()

{

T1_ini();

while(1)

{

keyscan();

display();

if(a >= 20 && flag) {

a = 0;

num++;

if(num==10) num=0;

}

}

}

试试看。


标签:


免责声明:家电维修服务中心部分文章信息来源于网络以及网友投稿,本网站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,如权利人发现存在误传其作品情形,请及时与本站联系。

相关文章 相关问题

文章评论

还可以输入 1500 个字

全部评论 0

还没有评论,快来抢沙发吧!