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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

家庭溫控使用的資料 源碼

[復制鏈接]
跳轉到指定樓層
樓主
僅供參考哈
家庭溫控使用的資料 源碼,謝謝支持

完整代碼下載:
UltrasonicR Success!.zip (63.69 KB, 下載次數: 11)


源程序:
  1. #define uint unsigned int
  2. #define uchar unsigned char
  3. #define GPIO_LED P2                //將P2口另外取名為GPIO_LED
  4. #include"lcd.h"
  5. #include<reg51.h>
  6. #include<intrins.h>
  7. #include<stdio.h>

  8. sbit io=P0^3;
  9. sbit rs=P2^6;
  10. sbit rw=P2^5;
  11. sbit lcden=P2^7;
  12. sbit key1=P1^4;                          //位操作
  13. sbit key2=P1^5;
  14. sbit key3=P1^6;
  15. sbit key4=P1^7;
  16. sbit key5=P3^5;
  17. sbit Trig=P2^1;
  18. sbit Beep=P2^1;
  19. sbit Echo = P2^0;                                  //////////////////////******************************************//////////////////////
  20. int menu=0;
  21. unsigned long TN=26;
  22. unsigned long TE=26;
  23. unsigned char menu1[]="#1 Warning Tem";
  24. unsigned char menu2[]="#2 WarningTeEdit";
  25. unsigned char menu3[]="#3 Music";
  26. unsigned char menu4[]="#4 UltrasonicR";
  27. unsigned char menu5[]="#5 More funtions";
  28. unsigned char Wt[]="HereisWarningTem";
  29. unsigned char Et[]="Original:";
  30. unsigned char Et1[]="Edit:";
  31. unsigned char open1[]="Hello,everyone";
  32. unsigned char open2[]="Welcom to here";
  33. unsigned char table[]="Hello,everyone";
  34. unsigned char table1[]="Welcom to here";
  35. unsigned char music[]="Laurel Blossom";
  36. unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','C'};
  37. static unsigned char DisNum = 0; //顯示用指針                                  
  38.        unsigned int  time=0;
  39.            unsigned long S=0;
  40.            unsigned long Wtnow=26;
  41.            unsigned long wedit=26;
  42.            bit      flag =0;
  43. void DisplayOneChar(uchar, uchar, uchar);
  44. unsigned char disbuff[4]           ={ 0,0,0,0,};

  45. unsigned char DST[]="The Distance";


  46. void Delay50ms(unsigned int c)   //誤差 0us
  47. {
  48.     unsigned char a,b;
  49.     for(;c>0;c--)
  50.         for(b=38;b>0;b--)
  51.             for(a=130;a>0;a--);
  52.                         }


  53. void Delay10ms(void)   //誤差 0us
  54. {
  55.     unsigned char a,b,c;
  56.     for(c=1;c>0;c--)
  57.         for(b=38;b>0;b--)
  58.             for(a=130;a>0;a--);
  59. }                                                                                 ///////////////////////////////////////////////////////
  60. ///////////////////////////////////////////////////////////////////////////////////////////////
  61. void Conut(void)
  62.         {                                                                   //time=100*S/1.7
  63.          time=TH0*256+TL0;

  64.          TH0=0;
  65.          TL0=0;
  66.                         
  67.          S=(time*1.7)/100;     //算出來是CM
  68.         if((S>=700)||flag==1) //超出測量范圍顯示“-”
  69.          {         
  70.           flag=0;
  71.          
  72.           DisplayOneChar(0, 1, ASCII[11]);
  73.           DisplayOneChar(1, 1, ASCII[10]);        //顯示點
  74.           DisplayOneChar(2, 1, ASCII[11]);
  75.           DisplayOneChar(3, 1, ASCII[11]);
  76.           DisplayOneChar(4, 1, ASCII[12]);        //顯示M
  77.          }
  78.          else
  79.          {       
  80.           disbuff[0]=S%1000/100;
  81.           disbuff[1]=S%1000%100/10;
  82.           disbuff[2]=S%1000%10 %10;
  83.           DisplayOneChar(0, 1, ASCII[disbuff[0]]);
  84.           DisplayOneChar(1, 1, ASCII[10]);        //顯示點
  85.           DisplayOneChar(2, 1, ASCII[disbuff[1]]);
  86.           DisplayOneChar(3, 1, ASCII[disbuff[2]]);
  87.           DisplayOneChar(4, 1, 'M');        //顯示M
  88.          
  89.         }
  90. }

  91. void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  92.   {
  93.     flag=1;                                                         //中斷溢出標志
  94.   }

  95. void  StartModule()                          //啟動模塊
  96.   {       
  97.   
  98.           Trig=1;                                             //啟動一次模塊
  99.           _nop_();
  100.           _nop_();
  101.           _nop_();
  102.           _nop_();
  103.           _nop_();
  104.           _nop_();
  105.           _nop_();
  106.           _nop_();
  107.           _nop_();
  108.           _nop_();
  109.           _nop_();
  110.           _nop_();
  111.           _nop_();
  112.           _nop_();
  113.           _nop_();
  114.           _nop_();
  115.           _nop_();
  116.           _nop_();
  117.           _nop_();
  118.           _nop_();
  119.           _nop_();
  120.           Trig=0;
  121.   }
  122.                                                                         ///////////////////////////////////////////////////////////        ////
  123.                                                                         ///////////////////////////////////////////////////////////////////

  124. void delayms(unsigned int ms)
  125. {
  126.         unsigned char i=100,j;
  127.         for(;ms;ms--)
  128.         {
  129.                 while(--i)
  130.                 {
  131.                         j=10;
  132.                         while(--j);
  133.                 }
  134.         }
  135. }




  136. unsigned char n=0;  //n為節拍常數變量   
  137. unsigned char code music_tab[] ={   
  138. 0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,   
  139. 0x20, 0x40, 0x1C , 0x10,   
  140. 0x18, 0x10, 0x20 , 0x10,   
  141. 0x1C, 0x10, 0x18 , 0x40,   
  142. 0x1C, 0x20, 0x20 , 0x20,   
  143. 0x1C, 0x20, 0x18 , 0x20,   
  144. 0x20, 0x80, 0xFF , 0x20,   
  145. 0x30, 0x1C, 0x10 , 0x18,   
  146. 0x20, 0x15, 0x20 , 0x1C,   
  147. 0x20, 0x20, 0x20 , 0x26,   
  148. 0x40, 0x20, 0x20 , 0x2B,   
  149. 0x20, 0x26, 0x20 , 0x20,   
  150. 0x20, 0x30, 0x80 , 0xFF,   
  151. 0x20, 0x20, 0x1C , 0x10,   
  152. 0x18, 0x10, 0x20 , 0x20,   
  153. 0x26, 0x20, 0x2B , 0x20,   
  154. 0x30, 0x20, 0x2B , 0x40,   
  155. 0x20, 0x20, 0x1C , 0x10,   
  156. 0x18, 0x10, 0x20 , 0x20,   
  157. 0x26, 0x20, 0x2B , 0x20,   
  158. 0x30, 0x20, 0x2B , 0x40,   
  159. 0x20, 0x30, 0x1C , 0x10,   
  160. 0x18, 0x20, 0x15 , 0x20,   
  161. 0x1C, 0x20, 0x20 , 0x20,   
  162. 0x26, 0x40, 0x20 , 0x20,   
  163. 0x2B, 0x20, 0x26 , 0x20,   
  164. 0x20, 0x20, 0x30 , 0x80,   
  165. 0x20, 0x30, 0x1C , 0x10,   
  166. 0x20, 0x10, 0x1C , 0x10,   
  167. 0x20, 0x20, 0x26 , 0x20,   
  168. 0x2B, 0x20, 0x30 , 0x20,   
  169. 0x2B, 0x40, 0x20 , 0x15,   
  170. 0x1F, 0x05, 0x20 , 0x10,   
  171. 0x1C, 0x10, 0x20 , 0x20,   
  172. 0x26, 0x20, 0x2B , 0x20,   
  173. 0x30, 0x20, 0x2B , 0x40,   
  174. 0x20, 0x30, 0x1C , 0x10,   
  175. 0x18, 0x20, 0x15 , 0x20,   
  176. 0x1C, 0x20, 0x20 , 0x20,   
  177. 0x26, 0x40, 0x20 , 0x20,   
  178. 0x2B, 0x20, 0x26 , 0x20,   
  179. 0x20, 0x20, 0x30 , 0x30,   
  180. 0x20, 0x30, 0x1C , 0x10,   
  181. 0x18, 0x40, 0x1C , 0x20,   
  182. 0x20, 0x20, 0x26 , 0x40,   
  183. 0x13, 0x60, 0x18 , 0x20,   
  184. 0x15, 0x40, 0x13 , 0x40,   
  185. 0x18, 0x80, 0x00   
  186. };   
  187.    
  188. void int0()  interrupt 1   //采用中斷0 控制節拍   
  189. {  TH0=0xd8;   
  190.    TL0=0xef;   
  191.    n--;   
  192. }   
  193.    
  194. void delay (unsigned char m)   //控制頻率延時   
  195. {   
  196. unsigned i=3*m;   
  197. while(--i);   
  198. }   
  199.    
  200. void delayms1(unsigned char a)  //豪秒延時子程序   
  201. {   
  202.   while(--a);                  //采用while(--a) 不要采用while(a--); 各位可編譯一下看看匯編結果就知道了!   
  203. }   

  204. void keyscan()    //按鍵掃描
  205. {
  206. if(key1==0)                                                                           
  207. {
  208.   Delay10ms();//防抖
  209.   if(key1==0)
  210.   {
  211.    menu=1;
  212.    while(!key1); //等待按鍵釋放
  213.   }
  214. }
  215. if(key2==0)
  216. {
  217.   Delay10ms();//防抖
  218.   if(key2==0)
  219.   {
  220.           switch(menu)
  221.           {
  222.           case 1:menu=2;break;
  223.           case 2:menu=3;break;
  224.           case 3:menu=4;break;
  225.           case 4:menu=5;break;
  226.           case 5:menu=1;break;
  227.       case 11:TE--;break;
  228.           }
  229.          while(!key2); //等待按鍵釋放
  230.   }
  231. }
  232. if(key3==0)
  233. {                                                                  
  234.   
  235.   Delay10ms();//防抖
  236.   if(key3==0)
  237. {
  238. switch(menu)
  239. {
  240. case 1:menu=5;break;
  241. case 2:menu=1;break;
  242. case 3:menu=2;break;
  243. case 4:menu=3;break;
  244. case 5:menu=4;break;
  245. case 11:TE++;break;
  246. }

  247.   while(!key3); //等待按鍵釋放
  248. }
  249. }
  250. if(key4==0)
  251. {
  252. Delay10ms();//防抖
  253.   if(key4==0)
  254.   {
  255.    switch(menu)
  256. {
  257. case 1:menu=10;break;
  258. case 2:menu=11;break;
  259. case 3:menu=12;break;
  260. case 4:menu=13;break;
  261. case 11:TN=TE;break;
  262. }

  263.    while(!key4); //等待按鍵釋放
  264.   }   
  265. }
  266. if(key5==0)
  267. {
  268.   Delay10ms();//防抖
  269.   if(key5==0)
  270.   {
  271.   switch(menu)
  272. {
  273. case 10:menu=1;break;
  274. case 11:menu=2;break;
  275. case 12:menu=3;break;
  276. case 13:menu=4;break;
  277. default:menu=0;
  278. }
  279.         while(!key5); //等待按鍵釋放
  280.   }
  281. }
  282. }
  283.    
  284. void music_p()   
  285. { unsigned char p,m;   //m為頻率常數變量   
  286.   unsigned char i=0;   
  287.   TMOD&=0x0f;   
  288.   TMOD|=0x01;   
  289.   TH0=0xd8;TL0=0xef;   
  290.   IE=0x82;   
  291. play:   
  292.    while(menu==12)   
  293.     {  
  294.     a: p=music_tab[i];   
  295.        if(p==0x00)       { i=0, delayms1(1000); goto play;}     //如果碰到結束符,延時1秒,回到開始再來一遍   
  296.        else if(p==0xff)  { i=i+1;delayms1(100),TR0=0; goto a;}  //若碰到休止符,延時100ms,繼續取下一音符   
  297.             else         {m=music_tab[i++], n=music_tab[i++];}  //取頻率常數 和 節拍常數   
  298.              TR0=1;                                             //開定時器1   
  299.            while(n!=0) Beep=~Beep,delay(m);                         //等待節拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  300.        TR0=0;                                       //關定時器1   
  301.    
  302.         keyscan();
  303.   }
  304. }




  305. void led()
  306. {         
  307.         unsigned char n;
  308.         GPIO_LED=0xfe;                        //1111_1110
  309.         while(menu==0)
  310.         {
  311.                 for(n=0;n<7;n++)                                                          //左移7次,這樣子就會到達最左邊
  312.                 {
  313.                         GPIO_LED=_crol_(GPIO_LED,1);                          //將GPIO_LED左移一位
  314.                     Delay50ms(10);                                                         //延時
  315.                 }
  316.                 for(n=0;n<7;n++)                                                         //右移7次,這樣子就會到達最右邊
  317.                 {
  318.                         GPIO_LED=_cror_(GPIO_LED,1);                                        //將GPIO_LED右移一位
  319.                         Delay50ms(10);                               
  320.                 }       
  321.        
  322.         keyscan();
  323.         }       
  324. }


  325. void main()
  326. {
  327.     TMOD=0x01;                   //設T0為方式1,GATE=1;
  328.          TH0=0;
  329.          TL0=0;         
  330.          ET0=1;             //允許T0中斷
  331.          EA=1;                           //開啟總中斷
  332.          while(1)
  333.          {
  334.                   StartModule();
  335.              while(!Echo);                //當RX為零時等待
  336.              TR0=1;                            //開啟計數
  337.              while(Echo);                        //當RX為1計數并等待
  338.              TR0=0;                                //關閉計數
  339.        
  340.          S=((TH0*256+TL0)*1.7)/100;  
  341.          TH0=0;
  342.          TL0=0;       
  343.          delayms(10);
  344.          if(S<=40)
  345.          {


  346.   keyscan();

  347.   if(menu==0)
  348.   {          InitLcd1602();
  349.         LcdShowStr(0,0,table);
  350.         LcdShowStr(0,1,table1);
  351.          keyscan();
  352.          keyscan();
  353.   }                                                                                                                                                           
  354. if(menu==1)
  355. {        
  356.         LcdShowStr(0,0,menu1);
  357.         LcdShowStr(0,1,menu2);

  358.         //顯示菜單1 2欄
  359. }
  360. if(menu==2)
  361. {       
  362.         LcdShowStr(0,0,menu2);
  363.         LcdShowStr(0,1,menu3);
  364.        

  365.         //顯示菜單2 3欄
  366. }
  367. if(menu==3)
  368. {
  369.         LcdShowStr(0,0,menu3);
  370.         LcdShowStr(0,1,menu4);

  371.         //顯示菜單3 4欄
  372. }
  373. if(menu==4)
  374. {
  375.         LcdShowStr(0,0,menu4);
  376.         LcdShowStr(0,1,menu5);

  377. }
  378. if(menu==5)
  379. {          InitLcd1602();
  380.         LcdShowStr(0,0,menu5);
  381.         LcdShowStr(0,1,menu1);

  382. }
  383.     if(menu==10)
  384.    {           InitLcd1602();
  385.       LcdShowStr(0,0,Wt);
  386.           disbuff[0]=TN%1000/100;
  387.           disbuff[1]=TN%1000%100/10;
  388.           disbuff[2]=TN%1000%10 %10;
  389.           DisplayOneChar(8, 1, ASCII[disbuff[0]]);
  390.           DisplayOneChar(9, 1, ASCII[disbuff[1]]);
  391.           DisplayOneChar(10, 1, ASCII[disbuff[2]]);
  392.           DisplayOneChar(11, 1, 0xdf);        //??M
  393.           DisplayOneChar(12, 1, ASCII[12]);        //顯示C

  394.    }

  395.         if(menu==11)
  396.     {          InitLcd1602();
  397.       LcdShowStr(0,0,Et);
  398.            LcdShowStr(0,1,Et1);
  399.           disbuff[0]=TN%1000/100;
  400.           disbuff[1]=TN%1000%100/10;
  401.           disbuff[2]=TN%1000%10 %10;
  402.           DisplayOneChar(10, 0, ASCII[disbuff[0]]);
  403.           DisplayOneChar(11, 0, ASCII[disbuff[1]]);
  404.           DisplayOneChar(12, 0, ASCII[disbuff[2]]);
  405.           DisplayOneChar(13, 0, 0xdf);        //??M
  406.           DisplayOneChar(14, 0, ASCII[12]);        //顯示C
  407.           disbuff[0]=TE%1000/100;
  408.           disbuff[1]=TE%1000%100/10;
  409.           disbuff[2]=TE%1000%10 %10;
  410.           DisplayOneChar(10, 1, ASCII[disbuff[0]]);
  411.           DisplayOneChar(11, 1, ASCII[disbuff[1]]);
  412.           DisplayOneChar(12, 1, ASCII[disbuff[2]]);
  413.           DisplayOneChar(13, 1, 0xdf);        //??M
  414.           DisplayOneChar(14, 1, ASCII[12]);        //顯示C

  415.     }
  416. if(menu==12)
  417. {                InitLcd1602();
  418.         LcdShowStr(0,0,music);
  419.         music_p();

  420. }
  421. if(menu==13)   //////////////////////////////////////////////////////////////////////////////////////
  422. {
  423.         InitLcd1602();
  424.         LcdShowStr(0,0,DST);
  425.         while(menu==13)
  426.         {
  427.              LcdShowStr(0,0,DST);
  428.                  StartModule();
  429.              while(!Echo);                //當RX為零時等待
  430.              TR0=1;                            //開啟計數
  431.              while(Echo);                        //當RX為1計數并等待
  432.              TR0=0;                                //關閉計數
  433.          Conut();                        //計算
  434.                  keyscan();                       
  435.                  delayms(70);
  436.                                 ///////////////////////////////////////////////////////////////////////////////////

  437. }
  438. }
  439. }

  440. if(S>40)

  441. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片大全免费播放 | 99热最新网址| 欧美日韩中文字幕在线 | 久久999| 国产精品美女久久久 | 欧美午夜一区二区三区免费大片 | 日韩在线成人 | 国产日屁| 五月激情六月婷婷 | 欧美jizzhd精品欧美巨大免费 | 亚洲免费在线 | 日韩av一区二区在线观看 | 精品1区 | 午夜99 | 亚洲国产一区二区三区 | 国产精品免费播放 | 黄色毛片在线看 | 久久久精品国产 | 日本一区二区三区在线观看 | 高清亚洲 | 国产视频精品在线观看 | 91在线看| 四虎永久免费地址 | 激情综合五月 | 亚洲一区免费 | 中文字幕高清免费日韩视频在线 | 精品国产一区二区久久 | 国产精品久久久久av | 久久久久久成人 | 国产精品久久久久久久久久久久 | 久久网一区二区三区 | 亚洲婷婷六月天 | 黄色播放 | 欧美一级毛片免费观看 | 91在线电影 | 国产欧美精品 | 久久久精品日本 | 91精品国产91久久久久久 | 欧洲一区二区在线 | 在线观看中文字幕视频 | 一本一道久久a久久精品综合蜜臀 |