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

標題: 單片機pwm+adc+顯示程序 [打印本頁]

作者: wangfushou    時間: 2019-11-11 11:24
標題: 單片機pwm+adc+顯示程序
  1. #include "lcd1602.h"
  2. #include "key.h"
  3. #include "pwm.h"
  4. #include "adc.h"
  5. #include "gpio.h"


  6. uint8 code table1[]="set:";       //要顯示的內容1放入數組table1 cold,warm
  7. uint8 code table11[]="cold";
  8. uint8 code table12[]="warm";
  9. uint8 code table2[]="now:";                //要顯示的內容2放入數組table2
  10. uint8 set_temperature=20,now_temperature=0;                //設定溫度默認22度
  11. uint8 set_shi=0,set_ge=0,now_shi=0,now_ge=0;
  12. uint8 cold_flag=1,warm_flag=0;                                //默認制熱模式
  13. uint8 duty=0;

  14. void adc_handle()
  15. {
  16.         uint8 i;
  17.         now_temperature=Get_ADC10bitResult(7);//讀取p1.7口adc轉換的值
  18.         for(i=1;i<50;i++)
  19.         {
  20.                 if(now_temperature>=i*15&&now_temperature<=(i+1)*15)
  21.                         now_temperature=30-i;
  22.         }
  23. }

  24. void display()
  25. {
  26.         DisplayListChar(0, 0, table1);       //從第一行第1列開始顯示內容1
  27.         set_shi=set_temperature/10+'0';                        //數字轉化為字符
  28.         set_ge=set_temperature%10+'0';
  29.         DisplayOneChar(4,0,set_shi);                                //顯示一個字符
  30.         DisplayOneChar(5,0,set_ge);
  31.         if(cold_flag==1)                                                                                //顯示“cold”
  32.         {
  33.                 DisplayListChar(9, 0, table11);
  34.                 if(set_temperature>=now_temperature)
  35.                         {
  36.                         PWMx_SetPwmWide(PWM7_ID,249, 0x00FA);                //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
  37.                         PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);  //輸出電壓為0        
  38.                         }        
  39.                 if(set_temperature<now_temperature)
  40.                         {
  41.                         signed int error=0,last_error=0,now_error=0;
  42.                         last_error=now_error;                                                                //保存上一次的誤差
  43.                         error=now_temperature-set_temperature;                //計算現在的誤差
  44.                         now_error=error;                                                                        //保存現在的誤差
  45.                         duty=251-((now_temperature-set_temperature)*25+(now_error-last_error)*0.8);
  46.                         PWMx_SetPwmWide(PWM7_ID,duty, 0x00FA);                //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
  47.                         PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);  //輸出電壓為0
  48.                         }
  49.         }

  50.         
  51.         if(warm_flag==1)
  52.         {
  53.                 DisplayListChar(9, 0, table12);
  54.                 if(set_temperature<=now_temperature)
  55.                         {
  56.                         PWMx_SetPwmWide(PWM7_ID,249, 0x00FA);                //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
  57.                         PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);
  58.                         }
  59.                 if(set_temperature>now_temperature)
  60.                         {
  61.                                 signed int error=0,last_error=0,now_error=0;
  62.                                 last_error=now_error;                                                                //保存上一次的誤差
  63.                                 error=set_temperature-now_temperature;                //計算現在的誤差
  64.                                 now_error=error;                                                                        //保存現在的誤差
  65.                                 duty=251-((set_temperature-now_temperature)*25+(now_error-last_error)*0.8);
  66.                                 PWMx_SetPwmWide(PWM7_ID,249, 0x00FA);                //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
  67.                                 PWMx_SetPwmWide(PWM6_ID,duty, 0x00FA);                                 
  68.                         }
  69.         }
  70.         DisplayListChar(0, 1, table2);       //從第二行第9列開始顯示內容2
  71.         adc_handle();                                                                                                //adc處理函數
  72.         now_shi=now_temperature/10+'0';
  73.         now_ge=now_temperature%10+'0';
  74.         DisplayOneChar(4,1,now_shi);
  75.         DisplayOneChar(5,1,now_ge);
  76. }

  77. int main()        
  78. {     
  79.   lcd_init();                 //液晶初始化
  80.         key_init();                                                                        //按鍵初始化
  81.         PWM_config();                                                                //pwm配置
  82.         ADC_config();              //ADC初始化
  83.         PWMx_SetPwmWide(PWM7_ID,249, 0x00FA);                //實際為P0.6口 輸出電壓3.3*(1-前數/后數)
  84.         PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);  //輸出電壓為0
  85.   while(1)
  86.         {
  87.                 scan_key();                                        //按鍵掃描
  88.                 display();                                        //顯示
  89.         }
  90. }
復制代碼


15 溫度傳感器.rar

119.25 KB, 下載次數: 41, 下載積分: 黑幣 -5


作者: zyx@    時間: 2020-8-12 22:07
沒仿真,都不知都功能能不能實現




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲综合视频 | 欧美日韩一区二区在线 | 一区久久 | 亚洲精品一 | 999久久| 亚洲二区视频 | 亚洲综合无码一区二区 | 别c我啊嗯国产av一毛片 | 蜜桃毛片 | 日韩一区二区在线观看 | 欧美久久天堂 | 亚洲精品国产第一综合99久久 | 日韩综合在线 | jav成人av免费播放 | 中文字幕欧美日韩一区 | 欧美在线视频观看 | 嫩草视频网| 免费毛片网站在线观看 | 国产视频一区在线 | av在线一区二区三区 | 成人精品免费 | 欧美人妖网站 | 色视频在线观看 | 毛片免费观看 | 三级av在线 | 99精品欧美一区二区蜜桃免费 | 九色国产 | 国产美女特级嫩嫩嫩bbb片 | 99精品视频在线观看免费播放 | 国产福利在线 | av网站在线看 | 男人天堂网站 | 日本五月婷婷 | 国内自拍视频在线观看 | 一级毛片在线播放 | 日韩精品一区二区三区 | 一区二区三区亚洲 | 丝袜久久| 一区二区三区影院 | 久久久精品网站 | 亚洲高清视频在线 |