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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于智能環境燈的單片機程序問題請教

[復制鏈接]
跳轉到指定樓層
樓主
ID:530765 發表于 2019-5-8 17:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
作為單面機的小菜鳥,只會些簡單的編程,需要大神的幫助。
該智能環境燈主要實現的功能:
1.能夠檢測環境光照強度,并顯示;
2.能夠實現根據當前環境來自動調節所需要的光照強度;
3.能夠實現緩慢將燈變亮和熄滅;


該程序最后的結果只有LCD顯示但不隨光照強度的改變而改變,我已經完全懵了,求幫助!

  1. #include <reg52.h>

  2. /*---------------宏定義-----------------*/
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. #define PWM_CYC 20 //PWM周期
  6. uchar bright_lev = 0; //0最大亮度 20最小亮度

  7. #define LIGHT_SPEED 1000


  8. #define delay(x) {uint i,j;for(i = x;i>0;i--)for(j=50;j>0;j--);}

  9. #define THC0 ((65536 - 10000)/256) //10ms定時器定時值
  10. #define TLC0 ((65536 - 10000)%256)

  11. /*--------------引腳定義-----------------*/

  12. /* AD0809引腳 */
  13. sbit ST=P3^7;
  14. sbit EOC=P3^6;
  15. sbit OE=P2^4;
  16. sbit CLK=P2^3;
  17. sbit ALE = P3^7;
  18. #define ADCV P1

  19. /* LED 引腳 */
  20. sbit RS=P2^0;
  21. sbit RW=P2^1;
  22. sbit E=P2^2;
  23. #define LEDData P0


  24. /* 電機PWM腳 */
  25. sbit PWM = P2^6;


  26. /*---------------全局變量----------------*/
  27. uchar num[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; // ROM字符庫
  28. uchar tab[]=" LUX "; //要顯示什么就在這兒改

  29. uchar environment_bright;


  30. void PWM_Drive(void);
  31. uchar Get_Vol(void);
  32. void Display(void);
  33. void light_control(void);
  34. void writecmd(uchar com);
  35. void writedata(uchar dat);
  36. void init(void);
  37. void Display_Result(uchar d);
  38. /*---------------------------------
  39. * 函數:SysTemInit 初使化
  40. *----------------------------------*/
  41. void SysTemInit(void)
  42. {
  43.         TMOD = 0x02; //定時器0 采用16位定時器
  44. TH0 = THC0; //設定定時值
  45. TL0 = TLC0;
  46.         ET0 = 1; //定時器T0 溢出中斷允許
  47. TR0 = 1; //啟動定時器0
  48.         EA = 1; //中斷總開關開
  49. }

  50. /*---------------------------------
  51. * 函數:main 程序主入口
  52. *----------------------------------*/
  53. void main(void)
  54. {
  55.         PWM = 0;
  56. SysTemInit();
  57.         for(;;)
  58.         {
  59.         PWM_Drive(); //PWM驅動
  60. environment_bright = Get_Vol(); //獲取環境亮度
  61. light_control();
  62.         Display_Result(environment_bright); //顯示
  63. }
  64. }

  65. /*---------------------------------
  66. * 函數:light_control 燈亮度控制
  67. *----------------------------------*/
  68. void light_control(void)
  69. {
  70.         static uint light_speed = 0;
  71.         if(environment_bright<127 && bright_lev > 0)
  72.         {
  73.         light_speed++;
  74.         if(light_speed > LIGHT_SPEED)
  75.         {
  76.         bright_lev--;
  77.         light_speed = 0;
  78.         }
  79.         }
  80.         else if(environment_bright>127 && bright_lev < PWM_CYC)
  81.         {
  82.         light_speed++;
  83.         if(light_speed > LIGHT_SPEED)
  84.         {
  85.         bright_lev++;
  86.         light_speed = 0;
  87.         }
  88.         }
  89. }

  90. /*---------------------------------
  91. * 函數:time0 10ms定時器0中斷入口 用于ADC時鐘
  92. *----------------------------------*/
  93. void time0() interrupt 1
  94. {
  95.         CLK = ~CLK;
  96. }


  97. /*---------------------------------
  98. * 函數:PWM_Drive 電機驅動
  99. * 參數:cmd 指令
  100. *----------------------------------*/
  101. void PWM_Drive(void)
  102. {
  103.         static uchar cnt = 0;
  104.         cnt++;
  105.         if(cnt < bright_lev) PWM = 1;
  106.         else PWM = 0;
  107.         if(cnt > PWM_CYC) cnt = 0;
  108. }

  109. /*---------------------------------
  110. * 函數:Get_Vol 獲取環境亮度
  111. * 返回:滑動變阻器電壓值 0-255 對應0-5V
  112. *----------------------------------*/
  113. uchar Get_Vol(void)
  114. {
  115.         uchar vol = 0;
  116.         ST = OE = 0;
  117.         ALE = 1;
  118.         ST = 1;
  119.         ALE = 0;
  120.         ST = 0;
  121.         while(EOC == 0);
  122.         OE = 1;
  123.         vol = ADCV;
  124.         return vol;
  125. }

  126. /*---------------------------------
  127. * 函數:Display LED顯示
  128. *----------------------------------*/
  129. void writecmd(uchar com) //寫指令
  130. {
  131. E=0;
  132. RS=0;
  133. RW=0;
  134. P0=com;
  135. delay(2);
  136. E=1;
  137. delay(2);
  138. E=0;
  139. }
  140. void writedata(uchar dat)//寫數據
  141. {
  142. E=0;
  143. RS=1;
  144. RW=0;
  145. P0=dat;
  146. delay(2);
  147. E=1;
  148. delay(2);
  149. E=0;

  150. }
  151. void init(void) //初始化
  152. {
  153. delay(15);
  154. writecmd(0x38);
  155. delay(5);
  156. writecmd(0x38);
  157. delay(5);
  158. writecmd(0x38);
  159. writecmd(0x38);
  160. writecmd(0x08);
  161. writecmd(0x01);
  162. writecmd(0x06);
  163. writecmd(0x0c);
  164. }
  165. void Display_Result(uchar n)
  166. {
  167. uchar j,d;
  168. init();

  169. d=(((n*4096)/1000.0)/0.000317969924);
  170. tab[5]=num[d%10];
  171. tab[4]=num[d/10%10];
  172. tab[3]=num[d/100%10];
  173. tab[2]=num[d/1000%10];
  174. tab[1]=num[d/10000%10];
  175. tab[0]=num[d/100000%10];

  176. writecmd(0x80); //液晶在80H+00地方顯示 (設置地址指針)
  177. for(j=0;j<16;j++) //有16個字符,要循環16次
  178. {
  179. writedata(tab[j]);
  180. delay(2);
  181. }
  182. while(1); //讓液晶顯示就一直停在這里。
  183. }
復制代碼








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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一级视频 | 蜜桃av鲁一鲁一鲁一鲁 | 国产高清精品一区 | 精品粉嫩aⅴ一区二区三区四区 | 一级毛片免费完整视频 | 亚洲福利视频一区二区 | 欧美精品一区二区三区在线播放 | 人人做人人澡人人爽欧美 | 久久综合一区 | 久久久久成人精品免费播放动漫 | 国产高清视频一区 | 国产蜜臀97一区二区三区 | 日本在线黄色 | 欧美高清成人 | 欧美精品一区在线 | 亚洲精品久久久久久国产精华液 | 一区二区三区四区免费观看 | 91一区二区 | 久热免费 | 欧美日韩国产在线 | 福利视频亚洲 | 国产区第一页 | 99视频在线免费观看 | 干干天天 | 日韩欧美二区 | 成人av一区二区三区 | 三级视频网站 | 日本黄色免费片 | 视频精品一区二区三区 | 久久久久久国产 | 欧美一区二区三区久久精品视 | 精品美女在线观看视频在线观看 | 羞羞的视频免费在线观看 | 久久久久亚洲精品 | 欧美操操操 | 一区二区三区在线 | 国产免费高清 | 免费午夜电影 | 丁香六月激情 | 麻豆视频在线免费观看 | 波多野结衣中文视频 |