找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5998|回复: 0
收起左侧

单片机按键加减清零仿真电路图与源程序

[复制链接]
ID:282675 发表于 2018-2-8 17:07 | 显示全部楼层 |阅读模式
这是一个单片机用按键控制数码管显示数字并且可以通过按键来调节数码管上显示数字的大小
含源码 (keil)和仿真电路(Proteus)
0.png
单片机源程序如下:
  1. #include<reg51.h>
  2. #include"intrins.h"
  3. #include"delay.h"
  4. /*uchar code DSY[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  5.                  0x82,0xf8,0x80,0x90,0xff}; //共阴,不显示小数点*/
  6. uchar code DSY[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
  7.                           0x7D,0x07,0x7F,0x6F};
  8. uchar buffer[3]={0,0,0};
  9. uchar key_counts=0;
  10. uchar key_CODE;
  11. /* 中断初值 */
  12. void init()
  13. {
  14. TMOD=0x00;
  15. TH0=(8192-1000)/32;
  16. TL0=(8192-1000)%32;
  17. EA=1;
  18. ET0=1;
  19. TR0=1;
  20. }

  21. /*显示函数*/
  22. void display()
  23. {
  24. uchar i,j=0xfe;
  25. buffer[2]=key_counts/100;
  26. buffer[1]=key_counts/10%10;
  27. buffer[0]=key_counts%10;
  28. for(i=0;i<3;i++)
  29. {
  30.    P3=0xff;//位选
  31.    P2=DSY[buffer[i]];//段选
  32.    P3=j;
  33.    j=_crol_(j,1);
  34.    delay(1);
  35. }
  36. }
  37. /*主函数*/
  38. void main()
  39. {
  40. init();
  41. //uchar i;
  42. P3=0xff;
  43. P1=0xff;
  44. P2=0xff;
  45. key_CODE=0xff;
  46. while(1)
  47. {
  48.          display();
  49.          key_CODE=P1;
  50.          switch(key_CODE)
  51.          {
  52.            case 0xfe:if(key_counts<255)key_counts++;break;
  53.            case 0xfd:if(key_counts>0)key_counts--;break;
  54.            case 0xfb:key_counts=0;break;
  55.          }
  56.          while(P1!=0xff)
  57.          display();
  58. }
  59.          
  60. }
  61. void timer0( ) interrupt 1 using 0
  62. {
  63. uchar flag;
  64. TH0=(8192-1000)/32;
  65. TL0=(8192-1000)%32;
  66. ……………………

  67. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
按键加减清零.zip (65.79 KB, 下载次数: 41)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表