找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机中断骰子实验原理图与源码

[复制链接]
ID:353454 发表于 2018-6-18 15:04 | 显示全部楼层 |阅读模式
QQ截图20180618150238.png

单片机源程序如下:
  1. #include<reg52.h>
  2. sbit P13=P1^3;
  3. sbit P12=P1^2;
  4. sbit P11=P1^1;
  5. sbit P10=P1^0;
  6. sbit led=P2^7;
  7. sbit key0=P3^7;
  8. sbit key1=P3^6;
  9. sbit key2=P3^5;
  10. unsigned char hour,min,sec,T50ms;
  11. unsigned char modstate
  12. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
  13. //unsigned char code tablemin[]={0xc0,0xcf,0xa4,0x86,0x8b,0x92,0x90,0xc7,0x80,0x82}
  14. void init();                                    
  15. void delay500us(unsigned char X)
  16. void display();                              
  17. void display001();                           
  18. void display002();                       
  19. void keyscan();                           
  20. void main()
  21. {  
  22. init();
  23. while(1)
  24. {
  25.   keyscan();
  26. }
  27. }
  28. void init()
  29. {
  30. TMOD=0x01;
  31. TH0=(65536-49990)/256;
  32. TL0=(65536-49990)%256;
  33. ET0=1;
  34. EA=1;
  35. TR0=1;
  36. }
  37. void delay500us(unsigned char X)
  38. {
  39. unsigned char i,j;
  40. for(i=X;i>0;i--)
  41. for(j=248;j>0;j--);
  42. }
  43. void timer0() interrupt 1
  44. {
  45. TMOD=0x01;
  46. TH0=(65536-49990)/256;
  47. TL0=(65536-49990)%256;
  48. T50ms++;
  49. if(T50ms>=20)
  50. {
  51.   T50ms=0;
  52.   sec++;
  53.   if(sec>=60)
  54.   {
  55.    sec=0;
  56.    min++;
  57.    if(min>=60)
  58.    {
  59.     min=0;
  60.     hour++;
  61.     if(hour>=24)hour=0;
  62.    }
  63.   }
  64. }
  65. }

  66. void display()
  67. {
  68. P1=0xff;
  69. P0=table[hour/10];
  70. P10=0;
  71. delay500us(5);
  72. P1=0xff;
  73.     P0=table[hour%10];
  74. P11=0;
  75. delay500us(5);
  76. P1=0xff;
  77. P0=table[min/10];
  78. P12=0;
  79. delay500us(5);
  80. P1=0xff;
  81. P0=table[min%10];
  82. P13=0;
  83. delay500us(5);
  84. if(T50ms<=10)led=0;
  85. if(T50ms>10)led=1;
  86. }
  87. void display001()
  88. {
  89.      P1=0xff;
  90. P0=table[hour/10];
  91. P10=0;
  92. delay500us(10);

  93.   P1=0xff;
  94. P0=table[hour%10];
  95. P11=0;
  96. delay500us(10);
  97. }
  98. void display002()
  99. {
  100.   P1=0xff;
  101. P0=table[min/10];
  102. P12=0;
  103. delay500us(10);
  104.   P1=0xff;
  105. P0=table[min%10];
  106. P13=0;
  107. delay500us(10);
  108. }
  109. void keyscan()  //???????
  110. {
  111. while(modstate==0)
  112. {
  113.   display();
  114.   if(key0==0)
  115.   {
  116.    display();
  117.    if(key0==0)modstate++
  118.    while(key0==0)display001()
  119.   }
  120. }
  121. //****************************************************************************//
  122. while(modstate==1)
  123. {
  124.   display001();
  125.   if(key0==0)
  126.   {
  127.    display001();
  128.    if(key0==0)modstate++;
  129.    while(key0==0)display002()
  130.   }
  131.   if(key1==0)
  132.   {
  133.    display001();
  134.    if(key1==0)
  135.    {
  136.     hour++;
  137.     if(hour>=24)hour=0;
  138.     while(key1==0)display001();
  139.    }
  140.   }
  141.   if(key2==0)
  142.   {
  143.    display001();
  144.    if(key2==0)
  145.    {
  146.     hour--;
  147.     if(hour>=24)hour=0;
  148.     while(key2==0)display001();
  149.    }
  150.   }
  151. }
  152. //****************************************************************************//
  153. while(modstate==2)
  154. {
  155.   display002();
  156.   if(key0==0)
  157.   {
  158.    display002();
  159.    if(key0==0)modstate=0;  //??????????10ms???????
  160.    while(key0==0)display(); //???????
  161.   }
  162.   if(key1==0)
  163.   {
  164.    display002();
  165.    if(key1==0)
  166.    {
  167.     min++;
  168.     if(min>=60)min=0;
  169.     while(key1==0)display002();
  170.    }
  171.   }
  172.   if(key2==0)
  173.   {
  174.    display002();
  175.    if(key2==0)
  176.    {
  177.     min--;
  178.     if(min>=60)min=0;
  179.     while(key2==0)display002();
  180.    }
  181.   }
  182. }
  183. }


复制代码

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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