Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5119404
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: C/C++

2011-04-09 16:45:56

俺家小三开始学习单片机开发,昨天晚上写的一个钟表小程序,发出来纪念一下。呵呵
 
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit key1=P3^4;
  5. sbit key2=P3^5;
  6. sbit key3=P3^6;
  7. sbit key4=P3^7;

  8. uchar code smg_du[]=
  9. {
  10.     0x3f,0x06,0x5b,0x4f, //0 1 2 3
  11.     0x66,0x6d,0x7d,0x07, //4 5 6 7
  12.     0x7f,0x6f,0x77,0x7c, //8 9 a b
  13.     0x39,0x5e,0x79,0x71,0x00 //c d e f null
  14. };
  15. uchar smg_we[]=
  16. {
  17.     0xfe,0xfd,0xfb,0xf7,
  18.     0xef,0xdf,0xbf,0x7f
  19. };

  20. sbit LACTCH1=P2^6;
  21. sbit LACTCH2=P2^7;
  22. uchar count;
  23. uchar clickcnt;
  24. uchar second;
  25. uchar minute;
  26. uchar hour;
  27. uchar dispbuf[6]={1,2,0,0,0,0};
  28. void delay(uint m)
  29. {
  30.     while(m--);
  31. }
  32. void main(void)
  33. {
  34. uchar j;
  35. count=0;
  36. second=0;
  37. hour=0;
  38. TMOD=0x01; //0000,0001 设置定时器0工作方式1
  39. TH0=(65536-50000)/256; //设置初值 定时50ms
  40. TL0=(65536-50000)%256;
  41. EA=1; //打开总中断
  42. ET0=1; //打开定时器0 中断

  43. while(1)
  44. {
  45. if(key3==0)
  46. {
  47. delay(100);
  48. if(key3==0)
  49. {
  50. second++;
  51. if(second==60)
  52. {
  53. second=0;
  54. }
  55. dispbuf[5]=second%10;
  56. dispbuf[4]=second/10;
  57. dispbuf[5]=second%10;
  58. dispbuf[4]=second/10;
  59. while(key3==0);
  60. }
  61. }
  62. if(key2==0)
  63. {
  64. delay(100);
  65. if(key2==0)
  66. {
  67. minute++;
  68. if(minute==60)
  69. minute=0;

  70. dispbuf[2]=minute/10;
  71. dispbuf[3]=minute%10;
  72. while(key2==0);
  73. }
  74. }
  75. if(key1==0)
  76. {
  77. delay(100);
  78. if(key1==0)
  79. {
  80. hour++;
  81. if(hour==24)
  82. hour=0;
  83. dispbuf[1]=hour%10;
  84. dispbuf[0]=hour/10;
  85. while(key1==0);
  86. }
  87. }

  88. if(key4==0)
  89. {
  90. delay(200);
  91. if(key4==0)
  92. {
  93. clickcnt++;
  94. if((clickcnt%2)==1)
  95. {
  96. TR0=1;
  97. }
  98. else
  99. {
  100. TR0=0;
  101. }
  102. }
  103. while(key4==0);
  104. }

  105. for(j=0;j<6;j++)
  106. {
  107. P0=smg_du[dispbuf[j]];
  108. LACTCH1=1;
  109. LACTCH1=0;

  110. P0=smg_we[j];
  111. LACTCH2=1;
  112. LACTCH2=0;
  113. delay(100);
  114. }
  115. }
  116. }
  117. void timer_int0(void) interrupt 1
  118. {
  119. TH0=(65536-50000)/256; //设置初值 定时50ms
  120. TL0=(65536-50000)%256;
  121. count++;
  122. if(count==20)
  123. {
  124. count=0;
  125. second++;
  126. if(second==60)
  127. {
  128. second=0;
  129. minute++;
  130. if(minute==60)
  131. {
  132. minute=0;
  133. hour++;
  134. if(hour==24)
  135. {
  136. hour=0;
  137. }
  138. dispbuf[1]=hour%10;
  139. dispbuf[0]=hour/10;
  140. }
  141. dispbuf[3]=minute%10;
  142. dispbuf[2]=minute/10;
  143. }
  144. dispbuf[5]=second%10;
  145. dispbuf[4]=second/10;
  146. }
  147. }
 
阅读(2648) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~