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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1419|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)定時(shí)程序問題分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

下面的單片機(jī)程序是我修改后要實(shí)現(xiàn)的功能是:一個(gè)按鍵,按一下數(shù)碼管顯示1,P3.3輸出低電平5秒后變高電平,延時(shí)一分鐘,P3.3輸出低電平5秒后再變高電平,如此往復(fù)。再按一下數(shù)碼管顯示2,P3.3輸出低電平5秒后變高電平,延時(shí)兩分鐘,P3.3輸出低電平5秒后再變高電平,如此往復(fù)。以此類推,直到按第五次,P3.3輸出低電平5秒后變高電平,延時(shí)五分鐘,P3.3輸出低電平5秒后再變高電平,如此往復(fù)。最后按第六次時(shí)數(shù)碼管熄滅,P3.3輸出高電平,按第七次時(shí)又開始重復(fù)1-5的動(dòng)作,也就是只要按鍵按下就一直往復(fù)循環(huán)。但現(xiàn)在的問題是每次P3.3不能低5秒,高1-5分鐘,把這個(gè)Delay_1ms(100);的值改大程序就卡在那里,按鍵無反應(yīng),程序不往下走,請(qǐng)各位幫忙給分析解決一下,謝謝,F(xiàn)在的延時(shí)數(shù)值程序能運(yùn)行,但時(shí)間太短了達(dá)不到目的。

/**************************************************************
* 文件 : -----.C
* 功能 : 對(duì)鍵盤進(jìn)行讀出,控制內(nèi)部數(shù)值的加減,在數(shù)碼管顯示0到5
***************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit KK1 = P3^1;//按鍵輸入;
sbit KK2 = P3^3;//輸出
uchar code table[11] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
/**************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
* 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
* 輸出 : 無
***************************************************************/
void Delay_1ms(uint x)
{
uchar i, j;
for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
}
/**************************************************************
* 名稱 : Display(uchar k)
* 功能 : 將參數(shù)分成十位、個(gè)位分別顯示
* 輸入 : k
* 輸出 : 無
***************************************************************/
void Display(uchar k)
{
P2 = 0; //先消隱
if (k / 10 == 0) P0 = table[10]; //顯示空白
else P0 = table[k / 10]; //顯示十位
P2 = 0x02; Delay_1ms(5); //顯示5ms
P2 = 0;
P0 = table[k % 10]; //顯示個(gè)位
P2 = 0x01; Delay_1ms(5);
}

/**************************************************************
* 名稱 : Delay_KK2
* 功能 :
***************************************************************/
void Delay_KK2(uchar y)
{
  KK2 = 1;
  Delay_1ms(1000);
  KK2 = 0;

}
/**************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
***************************************************************/
void Main(void)
{
uchar Value = 0; //數(shù)值
while(1) {
//P3 = 0xff;
if(!KK1) {//KK1按下
Display(Value);//延時(shí)消抖
Delay_1ms(20);
if(!KK1) {//KK1依然按下
while(!KK1);//等KK1釋放
Value++;
}
}
if(Value == 0) P2 = 0;
if(Value == 1){
  Display(Value); //顯示值  
  KK2 = 0;
  Delay_1ms(100);
  KK2 = 1;
}
if(Value == 2){
  Display(Value); //顯示值
  KK2 = 0;
  Delay_1ms(100);
  KK2 = 1;

}
if(Value == 3){
  Display(Value); //顯示值
   KK2 = 0;
  Delay_1ms(100);
  KK2 = 1;
}
if(Value == 4){
  Display(Value); //顯示值
KK2 = 0;
  Delay_1ms(100);
  KK2 = 1;
}
if(Value == 5){
  Display(Value); //顯示值
KK2 = 0;
  Delay_1ms(100);
  KK2 = 1;
}
if (Value > 5) Value = 0;//value

}
}


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

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2024-1-4 15:12 | 只看該作者
如果有具體的延遲要求,都是用定時(shí)器中斷的,用delayms是錯(cuò)誤的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:143767 發(fā)表于 2024-1-4 15:45 | 只看該作者
Hephaestus 發(fā)表于 2024-1-4 15:12
如果有具體的延遲要求,都是用定時(shí)器中斷的,用delayms是錯(cuò)誤的。

用定時(shí)器中斷比較復(fù)雜吧
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2024-1-4 16:51 | 只看該作者
不要用長(zhǎng)時(shí)間延時(shí)
要善用顯示的那段延時(shí)
  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. * 功能 : 延時(shí)子程序,延時(shí)時(shí)間為 1ms * x
  11. * 輸入 : x (延時(shí)一毫秒的個(gè)數(shù))
  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. * 功能 : 將參數(shù)分成十位、個(gè)位分別顯示
  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]; //顯示個(gè)位
  34.         if(EN)P2 = 0x01;
  35.         Delay_1ms(1);
  36. }

  37. /**************************************************************
  38. * 名稱 : Main()
  39. * 功能 : 主函數(shù)
  40. ***************************************************************/
  41. void Main(void)
  42. {
  43.         uchar Value = 0; //數(shù)值
  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);//耗時(shí)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. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

5#
ID:143767 發(fā)表于 2024-1-5 14:16 | 只看該作者
lkc8210 發(fā)表于 2024-1-4 16:51
不要用長(zhǎng)時(shí)間延時(shí)
要善用顯示的那段延時(shí)

您修改的程序功能已經(jīng)基本實(shí)現(xiàn)了,但是數(shù)碼管沒有任何顯示,不過還是謝謝你
回復(fù)

使用道具 舉報(bào)

6#
ID:161164 發(fā)表于 2024-1-5 17:21 | 只看該作者
dj3365191 發(fā)表于 2024-1-5 14:16
您修改的程序功能已經(jīng)基本實(shí)現(xiàn)了,但是數(shù)碼管沒有任何顯示,不過還是謝謝你

漏了一句
74行加
DispEN = 1;
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产免费人成xvideos视频 | 久久精品中文字幕 | 99久久婷婷国产亚洲终合精品 | 日韩欧美在线观看视频网站 | 欧美成年黄网站色视频 | 91黄在线观看 | 密室大逃脱第六季大神版在线观看 | 日本一道本视频 | 一区二区三区中文字幕 | www.久久国产精品 | 久久性 | 亚洲国产精久久久久久久 | 区一区二在线观看 | 色视频网站 | 久久最新网址 | 国产一级特黄视频 | 久久久久黄| 日韩成人精品在线观看 | 亚洲精品国产第一综合99久久 | 久久精品成人一区 | h视频在线免费 | 超碰成人免费观看 | 国产成人精品999在线观看 | 国产精品夜夜春夜夜爽久久电影 | 日韩在线视频免费观看 | 蜜桃视频成人 | 春色av| 欧美日韩久久精品 | 午夜视频免费在线观看 | 日韩精品成人一区二区三区视频 | 亚洲成人精选 | 久久精品国产一区 | 99精品热视频 | 欧美另类视频 | 久久精品91久久久久久再现 | 国产精品一区二区福利视频 | 成人在线亚洲 | 国产激情91久久精品导航 | 粉嫩一区二区三区四区公司1 | 免费看黄色小视频 | 欧美精品一区二区三区在线 |