找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc15单片机键控计数器代码

[复制链接]
跳转到指定楼层
楼主
ID:1084483 发表于 2023-6-16 12:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <stc15.h>
  2. #include <intrins.h>
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. sbit KEY2=P3^0;
  6. sbit KEY3=P3^1;
  7. sbit KEY4=P3^2;
  8. sbit KEY5=P3^3;
  9. void SEG_Display(SEG_Num);
  10. void Delay10ms();
  11. uchar code SegeTable[] = {
  12.     0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xff
  13. };
  14. uchar disNum[4]={0,0,9,9};
  15. uchar disScan[4]={0xff,0xff,0xef,0xdf};
  16. uchar SEG_Num=03;
  17. void main()
  18. {
  19.         uchar i=0;
  20.         P2M0=0X00;P2M1=0X00;
  21.         P4M0=0X00;P4M1=0X00;
  22.         while(1)
  23.         {
  24.                 SEG_Display(SEG_Num);
  25.                 if(KEY2==0)
  26.                 {
  27.                         Delay10ms();
  28.                         while(!KEY2);
  29.                         SEG_Num++;
  30.                         if(SEG_Num>99)
  31.                         {
  32.                                 SEG_Num=0;
  33.                   }
  34.           }
  35.                 if(KEY3==0)
  36.                 {
  37.                         Delay10ms();
  38.                         while(!KEY3);
  39.                         if(SEG_Num>0)
  40.                         {
  41.                         SEG_Num--;
  42.                         }
  43.                         else
  44.                         {
  45.                                 SEG_Num=99;
  46.                         }
  47.                
  48.         }
  49.         
  50.                 if(KEY4==0)
  51.         {
  52.                 if(KEY4==0)
  53.                 {
  54.                         while(!KEY4);
  55.                         SEG_Num=0;
  56.         }        
  57.         
  58.         }

  59.         }
  60. }
  61. void Delay10ms()                //@11.0592MHz
  62. {
  63.         unsigned char i, j;

  64.         i = 108;
  65.         j = 145;
  66.         do
  67.         {
  68.                 while (--j);
  69.         } while (--i);
  70. }
  71. void SEG_Display(uint Num)
  72. {
  73.         uchar i,qian,bai,shi,ge;
  74.         qian=Num/1000;
  75.   bai=(Num%1000)/100;
  76.   shi=(Num%100)/10;
  77.   ge=Num%10;
  78. disNum[0]=qian;
  79. disNum[1]=bai;
  80. disNum[2]=shi;
  81. disNum[3]=ge;
  82. if((disNum[0]==0)&&(disNum[1]!=0))
  83. {disNum[0]=16;}
  84. if((disNum[0]==0)&&(disNum[1]==0)&&(disNum[2]!=0))
  85. {disNum[0]=16;disNum[1]=16;}
  86. if((disNum[0]==0)&&(disNum[1]==0)&&(disNum[2]==0)&&(disNum[3]!=0))
  87. {disNum[0]=16;disNum[1]=16;disNum[2]=16;}
  88. for(i=0;i<4;i++)
  89. {
  90.          P4|=0X36;
  91.          P4&=disScan[i];
  92.          P2=SegeTable[disNum[i]] ;
  93.          Delay10ms();
  94. }
  95.         
  96. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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