欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請大家給小弟指點一下迷津。由于剛剛上手單片機程序 [打印本頁]

作者: cdiyy    時間: 2021-1-22 16:03
標題: 請大家給小弟指點一下迷津。由于剛剛上手單片機程序
有一臺風扇,上電時蜂鳴器長響一聲(200ms)
有1個觸摸開關按鈕和一個風速觸摸按鈕。
按一下開關,風扇打開,默認1擋,再按一下開關,風扇關閉。
當風扇關閉時,按風速按鈕,無反應
當風扇打開時,按一下風速按鈕,風速變2擋,再按一下風速按鈕,風速變3擋,再按一下風速按鈕,
風速又變回1擋,無限循環
無論風速在哪個擋,只要按下開關鍵,都關閉
沒按一次按鈕,蜂鳴器嘀一聲(100ms)


以上功能說明我想通過流程圖的方式表達出來,但是內功不夠。麻煩大家幫幫忙指教一下。謝謝大家



作者: 人人學會單片機    時間: 2021-1-22 17:28
視頻百度下載:https://pan.baidu.com/s/1qY6X3eG  
資料下載地址:https://pan.baidu.com/s/1bp4HLl9
給你發兩個百度盤網址 希望對你的問題有幫助
作者: csmyldl    時間: 2021-1-22 22:49
當內功不夠時,先從一個一個的IO口控制開始,不要搞太復雜的控制
作者: wulin    時間: 2021-1-23 08:40
有畫流程圖的時間都可以寫完代碼了。
  1. //程序適合STC15W104,時鐘11.0592MHz
  2. #include <reg51.H>                                         //單片機頭文件
  3. sfr AUXR=0x8E;                                                   //輔助寄存器
  4. #define uint unsigned int                         //宏定義數據類型uint
  5. #define uchar unsigned char                 //宏定義數據類型uchar
  6. //輸入輸出端口定義
  7. sbit key1=P3^0;                                                //開關
  8. sbit key2=P3^1;                                                //調速
  9. sbit OUT1=P3^2;                                                //風速1擋
  10. sbit OUT2=P3^3;                                                //風速2擋
  11. sbit OUT3=P3^4;                                                //風速3擋
  12. sbit Buzzer=P3^5;                                                //蜂鳴器
  13. //全局變量聲明
  14. bit   Switch=0;                                                //開關機標志位
  15. uchar Speed=0;                                                //速度控制變量
  16. uint  num;
  17. /*------------------------
  18.     初始化定時器
  19. ------------------------*/
  20. void Timer0Init()                //250微秒@11.0592MHz
  21. {
  22.         AUXR &= 0x7F;                //定時器時鐘12T模式
  23.         TMOD &= 0xF0;                //設置定時器模式
  24.         TMOD |= 0x02;                //設置定時器模式
  25.         TL0 = 0x1A;                   //設置定時初值
  26.         TH0 = 0x1A;                        //設置定時重載值
  27.         TR0 = 1;                                //定時器0開始計時
  28.         ET0 = 1;                                //開T0中斷
  29.         EA  = 1;                                //開總中斷
  30. }
  31. /*------------------------
  32.     按鍵掃描函數
  33. ------------------------*/
  34. void keyscan()       
  35. {
  36.         static bit key_sign=0;                        //按鍵狀態標志
  37.         static uint count=0;                        //計數變量                       
  38.         if(!key1||!key2)                                //檢測有按鍵操作
  39.         {
  40.                 if(++count>=1400 && key_sign==0)//消抖延時
  41.                 {
  42.                         key_sign=1;                                //按鍵狀態標志置1
  43.                         num = 400;                                //蜂鳴器響100ms
  44.                         TR0 = 1;                                        //定時器0開始計時
  45.                         if(!key1)                                //檢測開關鍵按下
  46.                         {
  47.                                 Switch=~Switch;                //開關機標志位取反
  48.                                 if(Switch)
  49.                                         Speed=1;                        //默認1擋
  50.                                 else Speed=0;                        //停
  51.                         }
  52.                         if(!key2 && Switch==1)        //檢測調速鍵按下并且開機有效
  53.                         {
  54.                                 Speed++;
  55.                                 if(Speed>=4)                        //循環調速
  56.                                         Speed=1;
  57.                         }
  58.                 }
  59.         }       
  60.         else
  61.         {
  62.                 key_sign=0;                                        //按鍵狀態標志清0
  63.                 count=0;                                        //消抖計數清0
  64.         }
  65. }
  66. /*------------------------
  67.     主函數
  68. ------------------------*/
  69. void main()                                                       
  70. {
  71.         num=800;//蜂鳴器響200ms
  72.         Timer0Init();
  73.         while(1)
  74.         {
  75.                 keyscan();
  76.                 switch(Speed)
  77.                 {
  78.                         case 0: OUT1=1;OUT2=1;OUT3=1;break;//停止
  79.                         case 1: OUT1=0;OUT2=1;OUT3=1;break;//1擋
  80.                         case 2: OUT1=1;OUT2=0;OUT3=1;break;//2擋
  81.                         case 3: OUT1=1;OUT2=1;OUT3=0;break;//3擋
  82.                 }
  83.         }
  84. }
  85. /*----------------------------
  86. 中斷服務函數(驅動無源蜂鳴器)
  87. -----------------------------*/
  88. void Timer0Interrupt(void) interrupt 1
  89. {
  90.         static uint count=0;                        //計數變量
  91.         count++;
  92.         Buzzer=~Buzzer;                                //驅動無源蜂鳴器
  93.         if(count>=num)
  94.         {
  95.                 TR0 = 0;                                                //關閉定時器
  96.                 count=0;                                                //清0
  97.                 Buzzer=1;                                        //復位
  98.         }
  99. }
復制代碼

作者: munuc_w    時間: 2021-1-23 09:05
單片機應用編程,必須先有正確的硬件平臺,控制軟件隨著硬件平臺而變。就樓主的問題,如果是弱電控制,可以用計數的方法實現,電源開關計數在0和1之間循環,0關風扇,1啟動風扇并作為調速的必要條件。調速開關在0,1,2(或1,2,3)之間循環,0對應1檔,1對應2檔,2對應3檔。

作者: 川蜀浪子    時間: 2021-1-23 10:47
wulin 發表于 2021-1-23 08:40
有畫流程圖的時間都可以寫完代碼了。

大神,這個代碼可以用STC8G的單片機嗎?
作者: 川蜀浪子    時間: 2021-1-23 11:16
wulin 發表于 2021-1-23 08:40
有畫流程圖的時間都可以寫完代碼了。

程序中這句的主要起什么作用呢?每一種芯片是不一樣的嗎?
sfr AUXR=0x8E;                                                   //輔助寄存器
作者: 壓著我頭發啦    時間: 2021-1-23 12:25
川蜀浪子 發表于 2021-1-23 11:16
程序中這句的主要起什么作用呢?每一種芯片是不一樣的嗎?
sfr AUXR=0x8E;                             ...

把程序復制到keil,編譯,沒問題。注釋掉你不懂的這一行。看看提示哪有錯誤
作者: wulin    時間: 2021-1-23 13:59
川蜀浪子 發表于 2021-1-23 11:16
程序中這句的主要起什么作用呢?每一種芯片是不一樣的嗎?
sfr AUXR=0x8E;                             ...

你沒有仔細看最前面的注釋:程序適合STC15W104。考慮樓主用8腳芯片,所以推薦此型號。51頭文件沒有AUXR寄存器。所以要定義此特殊功能寄存器。
作者: wulin    時間: 2021-1-23 14:02
川蜀浪子 發表于 2021-1-23 10:47
大神,這個代碼可以用STC8G的單片機嗎?

同一公司產品,沒用什么特殊功能,原則上沒有問題。
作者: 川蜀浪子    時間: 2021-1-23 16:04
壓著我頭發啦 發表于 2021-1-23 12:25
把程序復制到keil,編譯,沒問題。注釋掉你不懂的這一行。看看提示哪有錯誤

請問一下使用STC8F的芯片,編譯后出現重新定義是怎么回事?注譯掉這行代碼又可以。

51hei截圖_20210123160121.png (107.09 KB, 下載次數: 98)

51hei截圖_20210123160121.png

作者: 川蜀浪子    時間: 2021-1-23 16:05
wulin 發表于 2021-1-23 14:02
同一公司產品,沒用什么特殊功能,原則上沒有問題。

剛試了一下8F的芯片可以用。

作者: rayin    時間: 2021-1-23 16:44
代碼發出來,看下又沒問題
作者: wulin    時間: 2021-1-23 20:14
川蜀浪子 發表于 2021-1-23 16:04
請問一下使用STC8F的芯片,編譯后出現重新定義是怎么回事?注譯掉這行代碼又可以。

STC8F.H頭文件里已包含sfr AUXR=0x8E;當然會提示重復定義。注釋掉即可。
作者: 51mcu學習    時間: 2021-1-23 20:49
學習C51半個月,一個計時小程序寫不出來。書能看懂,自己寫就是寫不出來,被PLC編程邏輯固化了,用C語言寫,總是不對,郁悶啊
作者: cdiyy    時間: 2021-1-23 21:13
munuc_w 發表于 2021-1-23 09:05
單片機應用編程,必須先有正確的硬件平臺,控制軟件隨著硬件平臺而變。就樓主的問題,如果是弱電控制,可 ...

能不能幫忙畫一下流程圖呢,方便理解。我現在想不到怎么畫流程圖。萬分感謝
作者: cdiyy    時間: 2021-1-23 21:17
wulin 發表于 2021-1-23 08:40
有畫流程圖的時間都可以寫完代碼了。

感謝大師的指教,小弟我剛剛接觸單片機不久,我想通過流程圖的方式來增強理解算法的問題。能不能幫幫忙畫一下呢

作者: TTQ001    時間: 2021-1-24 09:49
這里有很多優秀的單片機專家提供建議。 很有幫助。
作者: jyb-jyb-2    時間: 2021-1-24 14:01
wulin 發表于 2021-1-23 08:40
有畫流程圖的時間都可以寫完代碼了。

AUXR=0X8E先把16進制換成2進制,10001110,這個是規定寄存器的功能。
作者: 黃youhui    時間: 2021-1-25 08:42
cdiyy 發表于 2021-1-23 21:17
感謝大師的指教,小弟我剛剛接觸單片機不久,我想通過流程圖的方式來增強理解算法的問題。能不能幫幫忙畫 ...

流程圖就這樣。

51hei截圖20210125084124.png (18.37 KB, 下載次數: 77)

51hei截圖20210125084124.png

作者: jchrui    時間: 2021-1-25 16:38
你可以先用仿真的方法,這樣就不用搭建硬件,由易到難,仿真能實現,硬件上基本就問題不大。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1