久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1649|回復: 3
打印 上一主題 下一主題
收起左側

單片機秒表程序,自己設置的倒計時時間一到,如何使蜂鳴器響

[復制鏈接]
跳轉到指定樓層
樓主
(1)設計精度為0.1S的秒表系統。
(2)設置啟動、暫停、清零按鈕。
(3)秒表支持設置最長倒計時長度,超過此長度報警。
目前進程:設計精度為0.1s完成、設置啟動、暫停、清零完成,秒表支持設置最長倒計時時間完成。現在就剩下如何當設置的倒計時時間到達后,蜂鳴器響了。蜂鳴器為P1^0.是不是應該在中斷函數中加程序。


單片機源程序如下:
  1. #include<reg52.h> // 包含 52 單片機寄存器定義的頭文件
  2. unsigned char Tab1[ ]={0x3f,0x06,0x5b,0x4f ,0x66,0x6d,0x7d,0x07,0x7f ,0x6f }; // 段碼表
  3. unsigned char Tab2[ ]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 個位段碼表
  4. unsigned int x;
  5. unsigned char k;
  6. sbit int0=P3^2;          //開始/暫停//
  7. sbit int1=P3^3;
  8. sbit SUB60=P1^1; //正計時/倒計時//
  9. sbit S60=P1^2; //控制60s//
  10. sbit K5=P1^3;//加1s//
  11. sbit K6=P1^4;//減1s//
  12. sbit K7=P1^5; //賦值60s//
  13. sbit K8=P1^6; //清零//

  14. sbit baojing=P1^0;// 報警燈

  15. /*************************** 延時 1ms 基準 ******************************************/
  16. void delay1ms(unsigned int i)
  17. {
  18. unsigned char j;
  19. while(i--)
  20. {
  21. for(j=0;j<125;j++) //1ms 基準延時程序 12MHZ 晶振
  22. {
  23. ;
  24. }
  25. }
  26. }
  27. /********************************************************************************
  28. ****************** 數碼管顯示程序 ***********************************************/
  29. void Display(unsigned int x)
  30. {
  31. P2=0xfe; //P2.0 引腳輸出低電平, DS6 點亮
  32. P0=Tab1[x/1000]; // 顯示百位
  33. delay1ms(6);
  34. P2=0xfd; //P2.1 引腳輸出低電平, DS6 點亮
  35. P0=Tab1[x%1000/100]; // 顯示十位
  36. delay1ms(6);
  37. P2=0xfb; //P2.2 引腳輸出低電平, DS6 點亮
  38. P0=Tab2[x%100/10]; // 顯示個位
  39. delay1ms(6);
  40. P2=0xf7; //P2.3 引腳輸出低電平, DS7 點亮
  41. P0=Tab1[x%10]; // 顯示 0.1 位
  42. delay1ms(6);
  43. P2=0xff;
  44. }


  45. /*******************************************
  46. 函數功能:主函數
  47. ******************************************/
  48. void main(void)
  49. {
  50. x=0;
  51. TMOD=0x01; // TMOD=0000 0001B, 使用計數器 T0 的工作方式 1
  52. EA=1; // 開起總中斷
  53. ET0=1; // 允許定時器 T0 的中斷
  54. EX0=1; // 允許外中斷 INT0
  55. IT0=1; //INT0 為下負脈沖觸發方式
  56. TH0=(65536-50000)/256; // 計數器 T0 高 8 位賦初值
  57. TL0=(65536-50000)%256; // 計數器 T0 低 8 位賦初值
  58. TF0=0; // 溢出標志位清零
  59. while(1)
  60. {
  61. /************************************************************
  62. ****************K5 P1.3 按一次加 1 開關 S1***************************/
  63. if(K5==0)
  64. {
  65. delay1ms(20);
  66. if(K5==0)
  67. {
  68. x=x+10;
  69. }
  70. while(!K5); // 摁鍵關斷 摁一次觸發一次
  71. }
  72. /***********************************************************
  73. ************K6 P1.4 按一次減 1 開關 S2**************************/
  74. if(K6==0)
  75. {
  76. delay1ms(20);
  77. if(K6==0)
  78. {
  79. if(x==0)
  80. {
  81. x=10; // 在 00.0 的時候停止
  82. }
  83. x=x-10;
  84. }
  85. while(!K6); // 摁鍵關斷 摁一次觸發一次
  86. }
  87. /*********************************************************************
  88. ******************K7 P1.5 初始值 賦值為 60.0 秒開關 S5********************/
  89. if(K7==0)
  90. {
  91. delay1ms(20);
  92. if(K7==0)
  93. {
  94. x=600; // 賦初值 60.0 秒
  95. }
  96. while(!K7); // 摁鍵關斷 摁一次觸發一次
  97. }
  98. /*********************************************************************
  99. ******************S60 控制 60S 停止開關 P1.2****************************/
  100. if(x==600)
  101. {
  102. if(S60==0) // 如果 P1.2 口是低電平,秒表變化范圍 00.0~60.0
  103. {
  104. TR0=0;
  105. }
  106. }
  107. /********************************************************************
  108. ******************K8 P1.6 清零 clear0 摁鍵開關 S3************************/
  109. if(K8==0)
  110. {
  111. delay1ms(20); // 延時消震
  112. if(K8==0)
  113. {
  114. x=0; // 數據清 0 數碼管顯示 000.0
  115. TR0=0; // 溢出標志位清 0
  116. }
  117. }
  118. /************ 數碼管顯示 ***************************************/
  119. Display(x);
  120. }
  121. }
  122. /**********INT0 中斷函數 用于開始或暫停開關 S4******************
  123. **************************************************************/
  124. void begin_stop() interrupt 0
  125. {
  126. if(int0==0)
  127. {
  128. delay1ms(30); // 延時消震
  129. if(int0==0)
  130. {
  131. TR0=~TR0; // 按鍵摁一次 讀秒開始或暫停
  132. if(x==0&&SUB60==0)
  133. {
  134. TR0=0;
  135. }
  136. }
  137. }
  138. }
  139. /*********************************************************
  140. ******T0 計數器中斷 控制每隔加 0.1 秒 ***********************/
  141. void add_one0() interrupt 1
  142. {
  143. k++;
  144. if(k==2)
  145. {
  146. k=0;
  147. TF0=0;
  148. if(SUB60==1) // 當 P1.1 口是高電平時秒表加 0.1s
  149. // 當 P1.1 口是低電平時秒表減 0.1s
  150. {
  151. x=x+1; // 秒表加 0.1s
  152. }
  153. else
  154. {
  155. x=x-1; // 秒表減 0.1s
  156. }
  157. if(x==0)
  158. {
  159. TR0=0;
  160. }
  161. if(x==9999)
  162. {
  163. TR0=0;
  164. }
  165. }
  166. TH0=(65536-50000)/256; // 計數器 T0 高 8 位賦初值
  167. TL0=(65536-50000)%256; // 計數器 T0 低 8 位賦初值
  168. }
復制代碼

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1047841 發表于 2022-11-28 10:33 | 只看該作者
看了以后 我的想法是這樣,定義一個全局變量unsigned char flag=0; 在if(x==9999) { TR0=0; } 里面標志位 置1,然后在while(1)循環下面添加條件即可
回復

使用道具 舉報

板凳
ID:1053789 發表于 2022-11-28 16:36 | 只看該作者
JJJ1234 發表于 2022-11-28 10:33
看了以后 我的想法是這樣,定義一個全局變量unsigned char flag=0; 在if(x==9999) { TR0=0; } 里面標志位  ...

void add_one0() interrupt 1
{
k++;
if(k==2)
{
k=0;
TF0=0;
if(SUB60==1) // 當 P1.1 口是高電平時秒表加 0.1s
// 當 P1.1 口是低電平時秒表減 0.1s
{
x=x+1; // 秒表加 0.1s
}
else
{
x=x-1; // 秒表減 0.1s
}
if(x==0)
{
TR0=0;
}
if(x==9999)
{
P1^0=1;
TR0=0;
}
}
TH0=(65536-50000)/256; // 計數器 T0 高 8 位賦初值
TL0=(65536-50000)%256; // 計數器 T0 低 8 位賦初值
}
是這樣改嗎?
回復

使用道具 舉報

地板
ID:1064785 發表于 2023-3-1 15:35 | 只看該作者
1005002719 發表于 2022-11-28 16:36
void add_one0() interrupt 1
{
k++;

解決了么,大哥
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人动漫在线观看 | 91在线看片 | 亚洲91精品| 黄色在线免费网站 | 日韩欧美成人一区二区三区 | 久久99精品久久久久久 | 欧美精品一区二区三区蜜桃视频 | 成人欧美一区二区三区视频xxx | 久久久天堂 | 亚洲欧美视频在线观看 | 成人毛片网 | 精品久久久久久久久久久久久久久久久 | 99在线免费观看视频 | 日本一区二区影视 | 四虎影院在线播放 | 国产激情片在线观看 | 337p日本欧洲亚洲大胆 | 色桃网 | 免费精品 | 久久久91精品国产一区二区三区 | 国产精品爱久久久久久久 | 国产精品a久久久久 | 国产精品99久久久久久久vr | 亚洲精品久久久久久宅男 | 久久久久网站 | 亚洲欧洲精品在线 | 欧美另类视频在线 | 精品毛片| 精品中文字幕视频 | 国产一区久久久 | 六月婷婷久久 | 国内av在线 | 天天拍天天插 | www.日韩系列| 波多野结衣二区 | 国产精品福利久久久 | 人人鲁人人莫人人爱精品 | 亚洲精品在线免费 | 99精品一区二区三区 | 欧美精品三区 | 黄色片网站国产 |