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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

家庭溫控使用的資料 源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:196302 發(fā)表于 2017-5-3 23:19 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
僅供參考哈
家庭溫控使用的資料 源碼,謝謝支持

完整代碼下載:
UltrasonicR Success!.zip (63.69 KB, 下載次數(shù): 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中斷用來計數(shù)器溢出,超過測距范圍
  92.   {
  93.     flag=1;                                                         //中斷溢出標(biāo)志
  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為節(jié)拍常數(shù)變量   
  137. unsigned char code music_tab[] ={   
  138. 0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),   
  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 控制節(jié)拍   
  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--); 各位可編譯一下看看匯編結(jié)果就知道了!   
  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為頻率常數(shù)變量   
  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;}     //如果碰到結(jié)束符,延時1秒,回到開始再來一遍   
  296.        else if(p==0xff)  { i=i+1;delayms1(100),TR0=0; goto a;}  //若碰到休止符,延時100ms,繼續(xù)取下一音符   
  297.             else         {m=music_tab[i++], n=music_tab[i++];}  //取頻率常數(shù) 和 節(jié)拍常數(shù)   
  298.              TR0=1;                                             //開定時器1   
  299.            while(n!=0) Beep=~Beep,delay(m);                         //等待節(jié)拍完成, 通過P1口輸出音頻(可多聲道哦!)   
  300.        TR0=0;                                       //關(guān)定時器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次,這樣子就會到達(dá)最左邊
  312.                 {
  313.                         GPIO_LED=_crol_(GPIO_LED,1);                          //將GPIO_LED左移一位
  314.                     Delay50ms(10);                                                         //延時
  315.                 }
  316.                 for(n=0;n<7;n++)                                                         //右移7次,這樣子就會到達(dá)最右邊
  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;                   //設(shè)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);                //當(dāng)RX為零時等待
  336.              TR0=1;                            //開啟計數(shù)
  337.              while(Echo);                        //當(dāng)RX為1計數(shù)并等待
  338.              TR0=0;                                //關(guān)閉計數(shù)
  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);                //當(dāng)RX為零時等待
  430.              TR0=1;                            //開啟計數(shù)
  431.              while(Echo);                        //當(dāng)RX為1計數(shù)并等待
  432.              TR0=0;                                //關(guān)閉計數(shù)
  433.          Conut();                        //計算
  434.                  keyscan();                       
  435.                  delayms(70);
  436.                                 ///////////////////////////////////////////////////////////////////////////////////

  437. }
  438. }
  439. }

  440. if(S>40)

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


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产电影一区二区 | 久久久久资源 | 三a毛片 | 精品久久99 | 激情国产视频 | 久久精品手机视频 | 天天拍天天草 | 国产激情视频在线观看 | 日本不卡高字幕在线2019 | 亚洲一区二区久久 | 成人高清在线视频 | 国产欧美精品区一区二区三区 | 成人在线视频免费看 | 国产乱码高清区二区三区在线 | 免费午夜电影 | 欧美国产精品 | 国产一区 | 国产乱码精品一区二区三区五月婷 | 欧美精品久久久久 | 欧美中文一区 | 精品久 | 成人免费一区二区 | 亚洲区视频| 国产一区二区观看 | 羞羞的视频免费在线观看 | 午夜av电影院 | 日批免费在线观看 | 男人天堂网址 | 国产精品免费av | 成人免费在线播放视频 | 国产黄视频在线播放 | 久久精品国产清自在天天线 | 国产美女在线播放 | 久久久五月天 | 羞羞色影院 | 成人免费网站www网站高清 | 99久久精品免费看国产四区 | 午夜爽爽爽男女免费观看影院 | 91精品国产高清一区二区三区 | 81精品国产乱码久久久久久 | 四虎影院在线观看免费视频 |