- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从44矩阵键盘输入一个2位数后用中断进行倒数,到0后显示1001
从4*4矩阵键盘输入一个2位数后用中断进行倒数,到0后显示1001
在输入一个数如44后只倒数而且只显示了一次43就不会倒数下去了,但是输入01后可以显示1001,请问是我的中断的问题还是主函数里有问题
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
uchar buff[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9的数码管数字数组
uint i,j,a,b,c,f,n;
uint keyscan();
uint keyscan1();
void delay(uint a) //延时子程序
{
uint b;
while(a--!=0)
{for(b=0;b100;b++);}
}
void tim(void) interrupt 1 using 1
{
unsigned char count;
uint k; //初值99
TH0=0xd8;
TL0=0xf0;
TR0=1;
count++;
if(count==100)
{ i=keyscan1();
j=i;
count=0;
j--;//秒减1
if(j==0)
{ //这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序
j=i; //减到0是重新赋值99
for(k=0;k200;k++)
{
P0=buff[1];P2=0x01;delay(3);
P0=buff[0];P2=0x02;delay(3);
P0=buff[0];P2=0x04;delay(3);//十位显示值处理
P0=buff[1];P2=0x08;delay(3);P2=0x00; //个位显示处理
}
}
for(k=0;k200;k++)
{
P0=buff[0];P2=0x01;delay(3);
P0=buff[0];P2=0x02;delay(3);
P0=buff[j/10];P2=0x04;delay(3);//十位显示值处理
P0=buff[j%10];P2=0x08;delay(3);P2=0x00; //个位显示处理
}
}EA=1;
}
void main()
{ uint a;
TMOD |=0x01;//定时器设置 10ms in 12M crystal
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打开中断
TR0=1;
while(1)
{ ;}
}
uint keyscan()//扫描键盘
{
uint cord_h,cord_l;
uint num;
P3=0x0f;
while(P3==0x0f);//等待键盘的变化(即输入)
cord_h=P30x0f;
if(cord_h!=0x0f)
{
delay(10);
if(cord_h!=0x0f)
{
cord_h=P30x0f;
P3=cord_h|0xf0;
cord_l=P30xf0;
num=cord_h|cord_l;
switch(num)
{
case 0xee:num=0;break;//0 按了矩阵键盘后可以的到相应的数
case 0xde:num=1;break;//1
case 0xbe:num=2;break;//2
case 0x7e:num=3;break;//3
case 0xed:num=4;break;//4
case 0xdd:num=5;break;//5
case 0xbd:num=6;break;//6
case 0x7d:num=7;break;//7
case 0xeb:num=8;break;//8
case 0xdb:num=9;break;//9
}return(num);
}
}return(0xff);
}
uint keyscan1() //等待和检测键盘上得到的数,并作出相应的显示,以及返回给main函数
{
uint h,l,k=0xff,m;
h=keyscan(); //从键盘输入一个数作十位数
P0=buff[h]; //回显刚才输入的数字
P2=0x01;
delay(2
文档评论(0)