找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1598|回复: 0
打印 上一主题 下一主题
收起左侧

用MCU做一个简易记分器,上拉电阻,数码管显示数字的段码表

[复制链接]
跳转到指定楼层
楼主
proteus仿真图


程序完整代码:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. sbit KEY1=P3^0;  //各按键所连io口
  4. sbit KEY2=P3^1;
  5. sbit KEY3=P3^2;
  6. sbit KEY4=P3^3;
  7. sbit KEY5=P3^4;
  8. unsigned char code yyy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管数字显示段码
  9. unsigned char xxx=0;
  10. unsigned char z=0;
  11. unsigned char y=0;
  12. unsigned char s=0;
  13.       
  14. void Delay100us()  //延迟函数  晶振值@11.0592MHz
  15. {
  16. unsigned char i;
  17. _nop_();
  18. i = 43;
  19. while (--i);
  20. }
  21. void Delay50us()  //[color=rgb(37, 37, 37)][backcolor=transparent][font=Tahoma,]延迟函数  [/font][/backcolor][/color][color=rgb(37, 37, 37)][backcolor=transparent][font=Tahoma,]晶振值[/font][/backcolor][/color]@11.0592MHz
  22. {
  23. unsigned char i;
  24. _nop_();
  25. i = 20;
  26. while (--i);
  27. }

  28. void key1()     //按键1控制1队的分数“加1”及俩队分数的清零
  29. {
  30.    if(KEY1==0)
  31.    {
  32.   Delay50us();
  33.    if(KEY1==0)
  34. {   
  35. while(!KEY1);
  36. if(xxx<10)
  37.      xxx++;
  38. if(xxx==10)
  39.   {xxx=0;z++;}
  40. }

  41.    }
  42.    if(KEY3==0)
  43.    {
  44.   if(KEY3==0)
  45.   Delay50us();
  46.   while(!KEY3)
  47. {
  48.    xxx=0;
  49.    z=0;
  50.    y=0;
  51.    s=0;
  52. }
  53.    }
  54. }
  55. void key2()     //[color=rgb(37, 37, 37)][backcolor=transparent][font=Tahoma,]按键2控制2队的分数“加1”[/font][/backcolor][/color]
  56. {
  57.    if(KEY2==0)
  58.    {
  59.    Delay50us();
  60.    if(KEY2==0)
  61. {   
  62. while(!KEY2);
  63. if(y<10)
  64.      y++;
  65. if(y==10)
  66.   {y=0;s++;}
  67. }

  68.    }
  69. }
  70. void key4()    //控制一队分数“减1”
  71. {
  72.    if(KEY4==0)
  73.    {
  74.    Delay50us();
  75.    if(KEY4==0)
  76. {   
  77. while(!KEY4) ;
  78.     if(xxx==0)
  79.   {xxx=9;z--;}
  80. else
  81.        xxx--;
  82. }

  83.    }
  84. }
  85. void key5()   //[color=rgb(37, 37, 37)][backcolor=transparent][font=Tahoma,]控制二队分数“减1”[/font][/backcolor][/color]
  86. {
  87.    if(KEY5==0)
  88.    {
  89.    Delay50us();
  90.    if(KEY5==0)
  91. {   
  92. while(!KEY5) ;  
  93.     if(y==0)
  94.   {y=9;s--;}
  95. else
  96.        y--;
  97. }

  98.    }
  99. }
  100. void display()  // 使数码管短时间交替显示使人看到数码管4个都是亮的
  101. {
  102.    P0=0xff;
  103.    Delay100us();
  104.    P2=0xfe;P0=yyy[xxx];
  105.    Delay100us();
  106.    P0=0xff;
  107.    Delay100us();
  108.    P2=0xfd;P0=yyy[z];
  109.    Delay100us();
  110.    P0=0xff;
  111.    Delay100us();
  112.    P2=0xfb;P0=yyy[y];
  113.    Delay100us();
  114.    P0=0xff;
  115.    Delay100us();
  116.    P2=0xf7;P0=yyy[s];
  117.    Delay100us();
  118. }
  119. main()
  120. {   
  121.    P3= 0xff;   //???????????io???????1
  122.    while(1)
  123.    {
  124.    display();  //??????????????????????
  125.    key1();
  126.    key2();
  127.    key4();
  128.    key5();  
  129.    }
  130. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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