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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機pwm+adc+顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:528775 發表于 2019-11-11 11:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  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

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

使用道具 舉報

沙發
ID:813457 發表于 2020-8-12 22:07 | 只看該作者
沒仿真,都不知都功能能不能實現
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色片av| 99精品视频免费观看 | 欧美久久视频 | 狠狠骚 | 精品视频一区二区三区在线观看 | 在线免费看91 | 一级片在线观看 | 亚洲v日韩v综合v精品v | av天天澡天天爽天天av | 久久亚洲一区二区三区四区 | 日日操av | 国产原创在线观看 | 国产精品自拍视频 | 天天色天天 | 成人一区av | 成人国产在线视频 | 日韩电影a| 精品在线看| 羞羞涩涩在线观看 | 国产欧美一级 | 91精品国产综合久久久久久 | 成人毛片视频免费 | 成人福利在线观看 | 国产精品亚洲欧美日韩一区在线 | 国产精品揄拍一区二区 | 91久久 | 国产农村妇女毛片精品久久麻豆 | 高清国产午夜精品久久久久久 | 中文字幕一区二区不卡 | 久久精品综合 | 中文在线a在线 | 国产欧美日韩在线 | 欧美一二区 | 久久久久久综合 | 免费同性女女aaa免费网站 | 久久久免费在线观看 | 99在线精品视频 | 欧美一级免费看 | 久久狼人天堂 | 色婷婷av一区二区三区软件 | 色888www视频在线观看 |