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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于51單片機按鈕控制數碼管計時程序 希望大佬幫忙完善一下代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:987571 發表于 2021-12-3 14:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
本人已經將代碼寫了一部分了,能夠將第一個按鈕控制第一第二個數碼管的計時,希望有大佬能夠把第二個按鈕控制第三第四個數碼管的計時完善一下。
謝謝幫忙了!

代碼如下
  1. #include <STC89C5xRC.H>
  2. #include <intrins.H>
  3.                                                                  /*分頻*/
  4. #define u8                                         unsigned char
  5. #define u16                                 unsigned int
  6. #define cpu_f                                         12000000
  7. #define machine_cycle                    6                                //如使用RC/RD單片機的雙倍速模式則需要改成6
  8. static unsigned char time_count=0;
  9. unsigned char code   dm[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  10. unsigned char        T0RH=0,TORL=0;//初始化高低位值存放變量
  11. bit time_le=1;
  12. //時鐘周期=晶振/12(6)
  13. void configTime0(u16 ms,u8 *T0H,u8 *TOL);
  14. void smg_watch(unsigned char wx,dx);
  15. void delay_ms(unsigned int count_ms);
  16. unsigned char  key(void (*call_key)());
  17. void stop_begin(void);
  18. void stop_begin2(void);
  19. /*1s翻轉*/

  20. void main(void)
  21. {
  22.   P1=0XFF;
  23.   configTime0(50,&T0RH,&TORL);        //定時器初始化,
  24.   while(1)
  25.   {
  26.           smg_watch(0,time_count/10);
  27.         smg_watch(1,time_count%10);
  28.         key(stop_begin2);
  29.   }
  30. }

  31. void stop_begin(void)
  32. {
  33. static unsigned char mode=1;
  34. mode=!mode;
  35. if(mode)
  36.         TR0=1;
  37. else
  38.         TR0=0;       
  39. }

  40. void stop_begin2(void)
  41. {
  42. static unsigned char mode2=1;
  43. mode2=!mode2;
  44. if(mode2)
  45.         time_le=1;
  46. else
  47.         time_le=0;       
  48. }

  49. unsigned char  key(void (*call_key)())
  50. {
  51.         if(!P30)//做下降沿檢測
  52.         {
  53.                 delay_ms(20);//延時消抖
  54.                 if(!P30)//做下降沿檢測       
  55.                 {                       
  56.                         while(!P30);//做松手檢測
  57.                         call_key();        //任務
  58.                         return 1;
  59.                 }
  60.                 else
  61.                 return 0;       
  62.         }
  63.         else
  64.         return 0;
  65. }

  66. /*******************************************************************************
  67. 函數功能:
  68. *   @ 定時器0初始化
  69. 參數描述:
  70. *   @ ms 初始化時間
  71. 返回值描述:
  72. *   @ 無
  73. 說明:
  74. *   @  
  75. *******************************************************************************/
  76. void configTime0(u16 ms,u8 *T0H,u8 *TOL)
  77. {
  78.         unsigned long temp;//0~4,294,967,296(32字節一般的時鐘都用這個變量算)
  79.         /*加載初值*/
  80.         temp=cpu_f/machine_cycle;//該宏定義在timer.c(52RC/RD具備6T雙倍速模式,如果為提高程序運行效率可更改宏定義)
  81.         temp=(temp*ms)/1000; //調用函數變量ms要轉換成秒

  82.         temp=65536-temp;   
  83.         temp=temp+1;//中斷在準備中斷時會使用一些機器周期去保存變量,造成響應延遲,這里嘗試抵消延遲
  84.        
  85.          /*數據結算*/
  86.         *T0H=(u8)(temp>>8);//變量類型強制轉換        //ff
  87.         *TOL=(u8)temp;                                                        //f5
  88.        
  89.         /*清空T0控制位,將T0配置成模式1*/
  90.         TMOD &=0XF0;
  91.         TMOD |=0X01; //置位         0000 0001
  92.        
  93.         /*賦初值*/
  94.         TH0=*T0H;//初負載值(高)        8位寄存器
  95.         TL0=*TOL;//(低)

  96.         /*初始化T0*/
  97.         TF0=0;//清空溢出標志位
  98.         ET0=1;//使能T0中斷
  99.         TR0=1;//啟動T0
  100.         EA=1;//開啟總中斷
  101. }

  102. void smg_watch(unsigned char wx,dx)
  103. {
  104.         /*關閉段選*/
  105.         P26=1;
  106.         P0=0Xff;/*清空位選*/
  107.         P27=1;//打開位選   =
  108.         P0=_crol_(0XFE,wx);//進行位選
  109.        
  110.         /*關閉位選*/
  111.         P27=0;
  112.         P0=0X00;/*清空段選*/
  113.         P26=1;//打開段選
  114.         P0= dm[dx];//輸入段選信號
  115.         delay_ms(1);//留顯
  116.          
  117. }

  118. void delay_ms(unsigned int count_ms)
  119. {
  120. unsigned int count=0;
  121. unsigned char i, j;
  122. for(count=0;count<count_ms;count++)
  123. {
  124.         _nop_();
  125.         _nop_();
  126.         i = 2;
  127.         j = 15;
  128.         do
  129.         {
  130.                 while (--j);
  131.         } while (--i);
  132. }

  133. }

  134. void Interrupt_timer0(void) interrupt 1        //主要模式為計數
  135. {       
  136.         static unsigned char jishu=0;
  137.         TH0=T0RH;//初負載值(高)
  138.         TL0=TORL;//(低)
  139.         /*計時*/
  140.         if(time_le)
  141.         jishu++;
  142.         if((jishu==20))//1s后
  143.         {
  144.                 time_count++;
  145.                 if(time_count==61)
  146.                         time_count=0;
  147.                 jishu=0;
  148.         }               
  149. }
復制代碼

keilproject_3.zip

25.86 KB, 下載次數: 1

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费一区二区三区在线视频 | 天堂久 | 日韩一级一区 | 久草.com | 日韩在线精品 | 久久久久久91香蕉国产 | 亚洲精品中文字幕av | 亚洲欧美日韩国产 | 91pron在线| 高清国产一区二区 | 99在线精品视频 | 亚洲天天干 | 国产精品日韩欧美一区二区三区 | 精品久久久久久中文字幕 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 亚洲高清在线 | 91视频在线观看 | 狠狠草视频| 国产 欧美 日韩 一区 | 国产一区二区视频免费在线观看 | 天天操天天摸天天干 | 91色站| 欧美日韩精品久久久免费观看 | 日本三级在线视频 | 久久成人精品视频 | 99国产精品视频免费观看一公开 | 久久中文一区二区 | 黄色一级免费 | 黄色一级片在线播放 | 一级黄色毛片 | 中日韩欧美一级片 | 国产高清在线精品一区二区三区 | 欧美一级黄色免费看 | 日韩免费视频 | 成人天堂| 欧美日韩视频网站 | 成人综合一区二区 | 日本偷偷操 | 午夜a级理论片915影院 | 91av大全| 久久一起草 |