标题: 单片机按键控制数码管代码,能给解释一下吗? [打印本页]

作者: 未来靠自己    时间: 2018-6-3 11:08
标题: 单片机按键控制数码管代码,能给解释一下吗?
  1. #define uchar unsigned char
  2. #include<reg51.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. void delay (uint x);
  6. sbit A=P1^0;
  7. sbit B1=P1^1;
  8. sbit B2=P1^2;
  9. sbit B3=P1^3;
  10. sbit dula=P2^1;
  11. sbit wela=P2^2;
  12. uchar c,i;
  13. unsigned char code NumDecode[] ={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,};
  14. void main()
  15. {
  16.         TMOD=0x11;
  17.         TH0=(65536-45872)/256;
  18.         TH0=(65536-45872)%256;
  19.         EA=1;
  20.         ET0=1;
  21.         TF0=1;
  22.         TR0=1;
  23.         while(1)
  24.         {
  25.                 if(B1==0)
  26.                 {
  27.                         delay(10);
  28.                         if(B1==0)
  29.                         {
  30.                                 while(B1==0)
  31.                                 {
  32.                                         if(c==20)//50ms中断20次
  33.                                         {
  34.                                         c=0;
  35.                                         i++;//倒计时总数每秒减1
  36.                                         }
  37.                                         if(i<10)
  38.                                         {
  39.                                         dula=0;//数码管位选选通
  40.                                         P0=NumDecode[i];//显示数据
  41.                                         }
  42.                                         else  //循环计时设置
  43.                                         {
  44.                                         i=0;
  45.                                         }
  46.                                 }
  47.                                 TR0=1;

  48.                         }
  49.                 }
  50.                 if(B2==0)
  51.                 {
  52.                         delay(10);
  53.                         if(B2==0)
  54.                         {
  55.                                 while(B2==0)
  56.                                 TR1=1;
  57.                         }
  58.                 }
  59.         }        
  60. }
  61. void t1() interrupt 1
  62. {        char
  63.         TH0=(65536-45872)/256;
  64.         TH0=(65536-45872)%256;
  65.         
  66. }
复制代码

捕获.PNG (123.09 KB, 下载次数: 31)

捕获.PNG

作者: yc_study    时间: 2018-6-5 14:16
先了解数码管的段选和片选,创建了一个数字库的数组能显示0-9,然后就是中断程序和定时器了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1