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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機pwm+adc+顯示程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:528775 發(fā)表于 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:";       //要顯示的內(nèi)容1放入數(shù)組table1 cold,warm
  7. uint8 code table11[]="cold";
  8. uint8 code table12[]="warm";
  9. uint8 code table2[]="now:";                //要顯示的內(nèi)容2放入數(shù)組table2
  10. uint8 set_temperature=20,now_temperature=0;                //設(shè)定溫度默認(rèn)22度
  11. uint8 set_shi=0,set_ge=0,now_shi=0,now_ge=0;
  12. uint8 cold_flag=1,warm_flag=0;                                //默認(rèn)制熱模式
  13. uint8 duty=0;

  14. void adc_handle()
  15. {
  16.         uint8 i;
  17.         now_temperature=Get_ADC10bitResult(7);//讀取p1.7口adc轉(zhuǎn)換的值
  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列開始顯示內(nèi)容1
  27.         set_shi=set_temperature/10+'0';                        //數(shù)字轉(zhuǎn)化為字符
  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-前數(shù)/后數(shù))
  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;                //計算現(xiàn)在的誤差
  44.                         now_error=error;                                                                        //保存現(xiàn)在的誤差
  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-前數(shù)/后數(shù))
  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-前數(shù)/后數(shù))
  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;                //計算現(xiàn)在的誤差
  64.                                 now_error=error;                                                                        //保存現(xiàn)在的誤差
  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-前數(shù)/后數(shù))
  67.                                 PWMx_SetPwmWide(PWM6_ID,duty, 0x00FA);                                 
  68.                         }
  69.         }
  70.         DisplayListChar(0, 1, table2);       //從第二行第9列開始顯示內(nèi)容2
  71.         adc_handle();                                                                                                //adc處理函數(shù)
  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-前數(shù)/后數(shù))
  84.         PWMx_SetPwmWide(PWM6_ID,249, 0x00FA);  //輸出電壓為0
  85.   while(1)
  86.         {
  87.                 scan_key();                                        //按鍵掃描
  88.                 display();                                        //顯示
  89.         }
  90. }
復(fù)制代碼


15 溫度傳感器.rar

119.25 KB, 下載次數(shù): 41, 下載積分: 黑幣 -5

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表