700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 51单片机proteus仿真 按键控制数码管数字显示

51单片机proteus仿真 按键控制数码管数字显示

时间:2019-10-12 21:57:35

相关推荐

51单片机proteus仿真 按键控制数码管数字显示

功能描述:

1.两位数码管显示,数码管可以显示0-99两位数字。需要用数码管驱动芯片

2.按一下加按键,数字加1,按到99之后数字变0。按一下减按键,数字减1,按到0之后变数字99。初始化显示为学号后两位。

资料下载链接

作品1

1.数码管驱动使用74LS245,74LS245是常用的数字芯片。

1.void display() 2.{3.P0=0;//清空显示 4. P0=dat[num/10];//段选,刷新第一位数码管的显示 5. a2=1;//位选2选中,接下来要做第二段的显示 6. a1=0;//取消位选1。 7. delay();//简单延时 8. P0=0;//清空显示 9. P0=dat[num%10];//段选,刷新第二位数码管的显示 10. a1=1; 11. a2=0; 12. delay(); 13.}

2.按键做在两个外部中断上,使能中断即可使用,不需要编写按键扫描函数

1.void jia() interrupt 0//按键中断处理函数 2.{3. if(num<99) 4. num=num+1; 5. else 6. num=0; 7.} 8.void jian() interrupt 2//按键中断处理函数 9.{10. if(num>0) 11. num=num-1; 12. else 13. num=99; 14.}

作品2

1.数码管驱动使用4511

驱动代码:

1.void Display(unsigned char i) //数码管数值显示 2.{3. static unsigned char ge, shi, mode; 4. if(mode!=i) //当值未改变时,去除计算,减少一次while循环时间 5. {6. ge = i % 10; 7. shi = i / 10; 8. }9. mode = i;//记录上一次值 10. 11. P2 = table[ge] + 0xf0;//数据+关闭位选 12. delay(1); //稳定数据 13. P2 &= 0xdf; //打开位选 共阴极低电平亮 14. delay(1); 15.16. P2 = table[shi] + 0xf0; 17. delay(1); 18. P2 &= 0xef; //P2位选 个位P2^5 十位P2^4 19. delay(1); 20.}

2.按键扫描函数

1.unsigned char KeyScan(void) //按键检测,返回显示值 2.{3. static bit flag1 = 0, flag2 = 0; //松手检测标志位 4. static unsigned char count = 35; //初始值 5. 6. if( (Key1 == 0) || (Key2 == 0) ) 7. {8. delay(10); //延时10ms 9. if(Key1 == 0) 10. {11. if(flag1==0)//一直按下时只执行一次,flag1=1 12. {13.if(count != 99) //判断是否在数码管显示范围内 14.count++; 15.else 16.count = 40; //超出则赋初值 17.flag1 = 1; 18. } 19. } 20. if(Key2 == 0) 21. {22. if(flag2==0) 23. {24.if(count != 0) 25.count--; 26.else 27.count=40; 28.flag2 = 1; 29. } 30. } 31. } 32. if(Key1==1) //松手标志位复位 33. flag1 = 0; 34. if(Key2==1) 35. flag2 = 0; 36. 37. return count; 38.}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。