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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機定時程序問題分析

查看數: 1564 | 評論數: 5 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2024-1-4 12:41

正文摘要:

下面的單片機程序是我修改后要實現的功能是:一個按鍵,按一下數碼管顯示1,P3.3輸出低電平5秒后變高電平,延時一分鐘,P3.3輸出低電平5秒后再變高電平,如此往復。再按一下數碼管顯示2,P3.3輸出低電平5秒后 ...

回復

ID:161164 發表于 2024-1-5 17:21
dj3365191 發表于 2024-1-5 14:16
您修改的程序功能已經基本實現了,但是數碼管沒有任何顯示,不過還是謝謝你

漏了一句
74行加
DispEN = 1;
ID:143767 發表于 2024-1-5 14:16
lkc8210 發表于 2024-1-4 16:51
不要用長時間延時
要善用顯示的那段延時

您修改的程序功能已經基本實現了,但是數碼管沒有任何顯示,不過還是謝謝你
ID:161164 發表于 2024-1-4 16:51
不要用長時間延時
要善用顯示的那段延時
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit KK1 = P3^1;//按鍵輸入;
  6. sbit KK2 = P3^3;//輸出
  7. uchar code table[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
  8. /**************************************************************
  9. * 名稱 : Delay_1ms()
  10. * 功能 : 延時子程序,延時時間為 1ms * x
  11. * 輸入 : x (延時一毫秒的個數)
  12. * 輸出 : 無
  13. ***************************************************************/
  14. void Delay_1ms(uint x)
  15. {
  16.         uchar i, j;
  17.         for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
  18. }
  19. /**************************************************************
  20. * 名稱 : Display(uchar k,uchar EN)
  21. * 功能 : 將參數分成十位、個位分別顯示
  22. * 輸入 : k,EN
  23. * 輸出 : 無
  24. ***************************************************************/
  25. void Display(uchar k,uchar EN)
  26. {
  27.         P2 = 0; //先消隱
  28.         if (k / 10 == 0) P0 = table[10]; //顯示空白
  29.         else P0 = table[k / 10]; //顯示十位
  30.         if(EN)P2 = 0x02;
  31.         Delay_1ms(1); //顯示1ms
  32.         P2 = 0;
  33.         P0 = table[k % 10]; //顯示個位
  34.         if(EN)P2 = 0x01;
  35.         Delay_1ms(1);
  36. }

  37. /**************************************************************
  38. * 名稱 : Main()
  39. * 功能 : 主函數
  40. ***************************************************************/
  41. void Main(void)
  42. {
  43.         uchar Value = 0; //數值
  44.         uchar Step = 0;
  45.         uchar XiaoDou = 0;
  46.         uint Yanshi = 0;
  47.         uint mSec = 0;
  48.         bit DispEN = 0;
  49.         while(1)
  50.         {
  51.                 Display(Value,DispEN);//耗時2ms
  52.                
  53.                 if(!KK1)  //KK1按下
  54.                 {
  55.                         if(XiaoDou<0xff)XiaoDou++;//KK1依然按下
  56.                         if(XiaoDou == 10)
  57.                         {
  58.                                 Value++;
  59.                                 if(Value>5)Value=0;
  60.                                 Step = 0;
  61.                         }
  62.                 }
  63.                 else
  64.                 {
  65.                         XiaoDou = 0;
  66.                 }
  67.                
  68.                 if(Value == 0)
  69.                 {
  70.                         DispEN = 0;
  71.                 }
  72.                 else
  73.                 {
  74.                         switch(Step)
  75.                         {
  76.                                 case 0:
  77.                                         KK2 = 0;
  78.                                         mSec=0;
  79.                                         Yanshi=0;
  80.                                         Step++;
  81.                                 break;
  82.                                 case 1:
  83.                                         if(++mSec>=500)
  84.                                         {
  85.                                                 mSec=0;
  86.                                                 if(++Yanshi>=5)
  87.                                                 {
  88.                                                         Yanshi=Value*60;
  89.                                                         KK2 = 1;
  90.                                                         Step++;
  91.                                                 }
  92.                                         }
  93.                                         break;
  94.                                 case 2:
  95.                                         if(++mSec>=500)
  96.                                         {
  97.                                                 mSec=0;
  98.                                                 if(--Yanshi==0)
  99.                                                 {
  100.                                                         Step=0;
  101.                                                 }
  102.                                         }
  103.                                 break;
  104.                         }
  105.                 }
  106.         }
  107. }
復制代碼



ID:143767 發表于 2024-1-4 15:45
Hephaestus 發表于 2024-1-4 15:12
如果有具體的延遲要求,都是用定時器中斷的,用delayms是錯誤的。

用定時器中斷比較復雜吧
ID:883242 發表于 2024-1-4 15:12
如果有具體的延遲要求,都是用定時器中斷的,用delayms是錯誤的。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 69av网| 日本二区在线观看 | 999久久久久久久 | 91久久网站 | 成人av在线播放 | 亚洲 精品 综合 精品 自拍 | 欧洲视频一区 | 国产精品99视频 | 一级黄色片一级黄色片 | 久草在线青青草 | 亚洲精品久久久一区二区三区 | 毛片在线视频 | 久久6| 午夜爱爱毛片xxxx视频免费看 | 九色网址| 久久性色 | 亚洲视频一区在线观看 | 一区二区亚洲 | 美女视频. | 久久久久久久久久久国产 | 国产欧美在线一区二区 | 亚洲精品乱码8久久久久久日本 | 色婷婷av一区二区三区软件 | 九色91视频| h在线观看| 精品网站999| 中文字幕在线中文 | 91福利网| 日本欧美在线视频 | 欧美视频在线播放 | 日韩精品在线一区二区 | 青青久草| 亚洲成人一二区 | 一区二区三区高清 | 久草热在线 | 毛片a级毛片免费播放100 | 色888www视频在线观看 | 在线观看国产网站 | 午夜精品一区二区三区免费视频 | 精品欧美一区二区三区久久久 | 91精品国产91久久久久青草 |