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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于DS18B20設計的溫度計(有時鐘、警報、lcd1602模塊)

[復制鏈接]
跳轉到指定樓層
樓主




單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char                        
  4. #define uint unsigned int  
  5. uchar i;
  6. sbit RS=P3^0;
  7. sbit RW=P3^1;
  8. sbit E=P3^2;//LCD的RS RW E三個端口的定義
  9. sbit BF=P2^7;
  10. sbit  d1=P1^0;
  11. sbit  d2=P1^1;//警報定義
  12. sbit key=P1^5;//總開關控制標志位
  13. sbit key1=P1^6;//加開關
  14. sbit key2=P1^7;//減開關
  15. uchar code t0[]="0000-00-00";
  16. uchar code t1[]="T:";
  17. uchar code t2[]="00:00:00";
  18. uchar code t3[]="Mon ";//清屏顯示
  19. uchar code wendu[]="0123456789";//定義數字,以方便顯示溫度以及時間
  20. uchar code weeks[]="Mon Tue Wed Thu Fri Sat Sun ";//定義一到星期天
  21. sbit DQ = P3^7;//DQ的數據線輸入輸出口
  22. uchar Temp;
  23. void delay(uint z)
  24. {
  25.         uint x,y;
  26.         for(x=20;x>1;x--)
  27.                 for(y=z;y>1;y--);
  28. }//延遲函數
  29. bit BusyTest(void)//忙檢測指令。對寄存器的操作,如果忙返回1,如果空閑返回0
  30.   {
  31.     bit result;
  32.           RS=0;      
  33.     RW=1;//RS=0;RW=1時可以讀寄存器的狀態
  34.     E=1;   //E=1才允許讀寫   
  35.     _nop_(); //空操作,主要作用類似于延遲
  36.     _nop_();
  37.     _nop_();
  38.     _nop_();   
  39.     result=BF; //將忙碌標志位賦值給result作為忙檢測指令的返回值
  40.    E=0; //將E重新置為低電平        
  41.    return result;
  42.   }

  43. void write_com(uchar com)//寫命令
  44. {
  45.         while(BusyTest()==1); //如果忙就等待  
  46.         RS=0;
  47.         RW=0;
  48.         P2=com;       
  49.         delay(5);
  50.         E=1;
  51.         delay(5);
  52.         E=0;
  53. }
  54. void write_date(uchar date)//寫數據
  55. {
  56.         while(BusyTest()==1); //如果忙就等待  
  57.         RS=1;
  58.         RW=0;
  59.         P2=date;
  60.         delay(5);
  61.         E=1;
  62.         delay(5);
  63.         E=0;
  64. }
  65. void init_lcd()//初始化
  66. {
  67.         E=0;
  68.         RW=0;
  69.         write_com(0x38);//LCD初始化設置 (顯示模式設置:16X2顯示,8位數據接口)  
  70.         write_com(0x01);//清屏,將以前的顯示清除
  71.         write_com(0x0c);//開顯示。無光標,光標不閃爍
  72.         write_com(0x06);//讓光標右移,字符不移動   
  73.         write_com(0x80);//初始化位置(第一行第一列)       
  74.         for(i=0;i<10;i++)
  75.                 {
  76.                         write_date(t0[i]);
  77.                         delay(0);//顯示"0000-00-00";
  78.                 }       
  79.                 write_com(0x80+13);       
  80.   for(i=0;i<4;i++)
  81.                 {
  82.                         write_date(t3[i]);//顯示"Mon "
  83.                         delay(0);
  84.                 }
  85.         write_com(0x80+0x40);
  86.         for(i=0;i<8;i++)
  87.                 {
  88.                         write_date(t2[i]);//顯示"00:00:00"
  89.                         delay(0);
  90.                 }
  91.         write_com(0x80+0x40+10);
  92.         for(i=0;i<2;i++)
  93.                 {
  94.                         write_date(t1[i]);//顯示"T:"
  95.                         delay(0);
  96.                 }
  97.                

  98. }


  99. void tmpDelay(int num)//做延遲用
  100. {
  101.         while(num--) ;
  102. }       
  103. void Init_DS18B20()//初始化設置

  104. {
  105.         unsigned char x=0;
  106.         DQ = 1; //先將數據線拉高         
  107.         tmpDelay(8);  
  108.         DQ = 0; //再將數據從高拉到低 。要求保持480~960us   
  109.         tmpDelay(80);//延遲略微在480~960us,以向DS18B20發出一持續的480~960us低電平復位脈沖   
  110.         DQ = 1;   //釋放數據線,將數據線拉高  
  111.         tmpDelay(14);//延遲給硬件反應時間
  112. //        x=DQ; //讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在),可有可無     
  113.         tmpDelay(20);
  114. }
  115.   unsigned char ReadOneChar()//讀一個字節
  116. {
  117.         unsigned char i=0;
  118.         unsigned char dat = 0;
  119.         for (i=8;i>0;i--)
  120.         {
  121.                 DQ = 0;
  122.                 dat>>=1;
  123.                 DQ = 1;
  124.                 if(DQ)
  125.                 dat|=0x80;
  126.                 tmpDelay(4);

  127.         }
  128.         return(dat);
  129. }
  130. void WriteOneChar(unsigned char dat)//寫一個字節數據
  131. {
  132.         unsigned char i=0;
  133.         for (i=8; i>0; i--)
  134.         {
  135.                 DQ = 0;
  136.                 DQ = dat&0x01;
  137.                 tmpDelay(5);
  138.                 DQ = 1;
  139.                 dat>>=1;
  140.         }
  141. }

  142. unsigned int Readtemp()
  143. {
  144.         unsigned char a=0;
  145.         unsigned char b=0;
  146.         unsigned int t=0;
  147.         float tt=0;       
  148.         Init_DS18B20();//初始化

  149.         WriteOneChar(0xCC); //跳過ROM
  150.         WriteOneChar(0x44); //溫度轉換
  151.         Init_DS18B20();//初始化,每次執行都要初始化
  152.         WriteOneChar(0xCC); //跳過ROM
  153.         WriteOneChar(0xBE);//存暫存器
  154.         a=ReadOneChar();  //將低兩位放在a中
  155.         b=ReadOneChar();  //將高兩位放在b中                        
  156.         t=b;
  157.         t<<=8;
  158.         t=t|a;
  159.         tt=t*0.0625;  
  160.         t= tt*10+0.5;
  161.         return(t);
  162. }
  163. unsigned int num,num1;  

  164. void display()//動態顯示
  165. {
  166.         unsigned int num,num1;  
  167.         unsigned int shi,ge,xiaoshu;
  168.   
  169.         num=Readtemp();
  170.         num1=num/10;
  171.        
  172. /*****溫度高于100度或者低于10度時警報器響紅燈亮*****/
  173.         if(num1>100)
  174.         {
  175.                 d1=0;d2=0;
  176.   }       
  177.   else if(num1<10)
  178.         {
  179.                 d1=0;d2=0;
  180.   }       
  181. else
  182. {
  183.         d1=1;d2=1;
  184. }       
  185. /*********************************************/
  186.         shi=num/100;//溫度的十位
  187.         ge=num/10%10;//溫度的個位
  188.         xiaoshu=num%10;//溫度的小數位

  189.         write_com(0x80+0x40+12);//顯示的位置
  190.         write_date(wendu[shi]);//顯示十位

  191.         write_com(0x80+0x40+13);//顯示的位置
  192.         write_date(wendu[ge]);//顯示個位

  193.         write_com(0x80+0x40+14);//顯示的位置
  194.         write_date(0x2e);//顯示小數點

  195.         write_com(0x80+0x40+15);//顯示的位置
  196.         write_date(wendu[xiaoshu]);//顯示十位
  197. }
  198. unsigned char shis=23,fen=59,miao=50;//定義時分秒
  199. unsigned int nian=2017,yue=5,ri=24,xingqi=8,k=0;//定義年月日
  200. void LCD_time()//時間
  201. {
  202. /**********年月日*****************/
  203.           write_com(0x80);
  204.           write_date(wendu[nian/1000]);//千位
  205.           write_date(wendu[nian%1000/100]);//百位
  206.           write_date(wendu[nian%100/10]);//十位
  207.           write_date(wendu[nian%10]);//個位
  208.           write_com(0x80+5);
  209.           write_date(wendu[yue/10]);
  210.           write_date(wendu[yue%10]);
  211.            write_com(0x80+8);
  212.           write_date(wendu[ri/10]);
  213.           write_date(wendu[ri%10]);
  214. /***********星 期****************/
  215.           write_com(0x80+13);
  216.           for(k=0+xingqi;k<4+xingqi;k++)
  217.         {
  218.              write_date(weeks[k]);
  219.         }               
  220. /***********時分秒***************/
  221.                 write_com(0x80+0x40);
  222.           write_date(wendu[shis/10]);
  223.           write_date(wendu[shis%10]);
  224.           write_com(0x80+0x40+3);
  225.           write_date(wendu[fen/10]);
  226.           write_date(wendu[fen%10]);
  227.            write_com(0x80+0x40+6);
  228.           write_date(wendu[miao/10]);
  229.           write_date(wendu[miao%10]);
  230. }
  231. /*************************************
  232. 函數功能:秒鐘走動時,時,分 年 月 日以及星期的換算
  233. **************************************/
  234. void zou()
  235. {
  236.                 if(fen==60)
  237.                 {
  238.                 fen=0;
  239.                 shis++;
  240.                 }
  241.                 if(shis==24)
  242.                 {
  243.                  shis=0;
  244.                  ri++;
  245.                  xingqi+=4;
  246.                  if(xingqi==28)
  247.                                 xingqi=0;
  248.                 }
  249.     if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
  250.                 {
  251.                   if(ri==32)
  252.                   {
  253.                   ri=1;
  254.                   yue++;
  255.                   }
  256.                 }       
  257.     else if(yue==2&&((nian%400==0)||(nian%4==0&&nian%100!=0)))
  258.                 {
  259.                         if(ri==30)
  260.                   {
  261.                   ri=1;
  262.                   yue++;
  263.                   }
  264.     }       
  265.                
  266.     else if(yue==4||yue==6||yue==9||yue==11)
  267.                 {
  268.                         if(ri==31)
  269.                   {
  270.                   ri=1;
  271.                   yue++;
  272.                   }
  273.     }       
  274.    else       
  275.          {
  276.      if(ri==29)
  277.                   {
  278.                   ri=1;
  279.                   yue++;
  280.                   }
  281.    }                 
  282.                 if(yue==13)
  283.                 {
  284.                 yue=1;
  285.                 nian++;
  286.                 }
  287. }
  288. /*******************************************************
  289. 函數功能:總開關控制調時間的標識為Temp,Temp為1時可調秒
  290. Temp為2時,調分依次到可調年后Temp重置為0,時間繼續走
  291. *******************************************************/
  292. void keys()
  293. {
  294.         if(key==0)
  295.         {
  296.                 delay(10);
  297.                 if(key==0)
  298.                 {
  299.                         while(key==0)
  300.                           display();
  301.       TR0=0;
  302.                         Temp++;
  303.                         if(Temp==8)
  304.                         {       
  305.                                 Temp=0;
  306.                                 TR0=1;
  307.                         }
  308.     }
  309.   }
  310. }
  311. /*定義以下函數*/
  312. void mins(uchar);
  313. uchar key_button(uchar Times,Temp);
  314. uint key_nian(uint Times);
  315. void key_Temp(uchar Temp);
  316. uchar key_xingqi(uchar Times);
  317. uchar Y;
  318. void main()
  319. {
  320.         EA=1;
  321.         ET0=1;
  322.         TMOD=0X01;
  323.         TH0=(65536-50000)/256;
  324.         TL0=(65536-50000)%256;
  325.         TR0=1;//時鐘的初始化
  326.         init_lcd();//初始化LCD
  327.         d1=1;d2=1;
  328.         while(1)
  329.         {

  330.           display();//溫度顯示
  331.                 zou();//判斷時間之間的運算,實現秒鐘走可以控制時分,年月日以及星期的換算
  332.                 key_Temp(Temp);//根據標識位置確定可以調節那個時間
  333.                 keys();//總開關
  334.                 LCD_time();//時間顯示
  335.   }

  336. }

  337. void int0() interrupt 1  //定時器中斷1
  338. {
  339.         unsigned char ms;
  340.         TH0=(65536-50000)/256;
  341.         TL0=(65536-50000)%256;
  342.         ms++;
  343.         if(ms==20)
  344.         {
  345.                 ms=0;
  346.                 miao++;
  347.                 if(miao==60)
  348.                 {
  349.                         miao=0;
  350.                         fen++;
  351.                 }
  352.   }
  353. }
  354. /********************************************************/
  355. void key_Temp(uchar Temp)//實現調節時鐘時閃爍的效果,
  356.         {
  357.      switch(Temp)
  358.                                  {
  359.                                          case 1:
  360.                                               Y=5;
  361.                                                  while(Y--){   mins(Temp);      miao=key_button(miao,1);keys();}
  362.                                                     Y=5;
  363.                                                  while(Y--){  LCD_time();        miao=key_button(miao,1);keys();}
  364.                                            break;
  365.                                          case 2:
  366.                                               Y=5;
  367.                                                  while(Y--){   mins(Temp);     fen=key_button(fen,2);keys();}
  368.                                                     Y=5;
  369.                                                  while(Y--){ LCD_time();       fen=key_button(fen,2);keys();}
  370.                                            break;
  371.                                          case 3:
  372.                                               Y=5;
  373.                                                  while(Y--){  mins(Temp);      shis=key_button(shis,3);keys();}
  374.                                                     Y=5;
  375.                                                  while(Y--){ LCD_time();       shis=key_button(shis,3);keys();}
  376.                                          break;
  377.                                                  case 4:
  378.                                               Y=5;
  379.                                                  while(Y--){  mins(Temp);      xingqi=key_xingqi(xingqi);keys();}
  380.                                                     Y=5;
  381.                                                  while(Y--){  LCD_time();       xingqi=key_xingqi(xingqi);keys();}
  382.                                            break;
  383.                                                  case 5:
  384.                                               Y=5;
  385.                                                  while(Y--){  mins(Temp);      ri=key_button(ri,Temp);keys();}
  386.                                                     Y=5;
  387.                                                  while(Y--){  LCD_time();      ri=key_button(ri,Temp);keys();}
  388.                                         break;
  389.                                                  case 6:
  390.                                                           Y=5;
  391.                                                  while(Y--){  mins(Temp);      yue=key_button(yue,Temp);keys();}
  392.                                                     Y=5;
  393.                                                  while(Y--){  LCD_time();      yue=key_button(yue,Temp);keys();}
  394.                                                  break;
  395.                                                  case 7:
  396.                                                           Y=5;
  397.                                                  while(Y--){  mins(Temp);      nian=key_nian(nian);keys();}
  398.                                                     Y=5;
  399.                                                  while(Y--){      LCD_time();  nian=key_nian(nian);keys();}
  400.                                                  break;
  401.          }


  402.   }
  403. /********************************************************/
  404. uchar key_button(uchar Times,Temp)//月、日、時分秒
  405. {
  406.          if(key1==0)
  407.                  {
  408.                    delay(10);
  409.                          if(key1==0)
  410.                          {
  411.                                  while(key1==0)
  412.                                     LCD_time();  
  413.                                  Times++;
  414.                                  if(Temp==3)
  415.                                  {
  416.                                          if(Times==24)
  417.                                                   Times=0;
  418.          }
  419.                                  else if(Temp==1||Temp==2)
  420.                                  {
  421.                                          if(Times==60)
  422.                                                  Times=0;
  423.          }
  424.                                 else if(Temp==5)
  425.                                  {
  426.                                          if(Times==32)
  427.                                                  Times=0;
  428.          }
  429.                                  else if(Temp=6)
  430.                                  {
  431.                                          if(Times==13)
  432.                                                  Times=0;
  433.          }
  434.                                  
  435.                                  
  436.        }
  437.                           
  438.      }
  439.                  if(key2==0)
  440.                  {
  441.                    delay(10);
  442.                          if(key2==0)
  443.                          {
  444.                                  while(key2==0)
  445.                                    display();
  446.                                  Times--;
  447.                                  if(Temp==3)
  448.                                  {
  449.                                          if(Times==255)
  450.                                                  Times=23;
  451.          }
  452.                                  else if(Temp==1||Temp==2)
  453.                                  {
  454.                                          if(Times==255)
  455.                                                  Times=59;
  456.          }
  457.                                 else if(Temp==5)
  458.                                  {
  459.                                          if(Times==255)
  460.                                                  Times=31;
  461.          }
  462.                                  else if(Temp==6)
  463.                                  {
  464.                                          if(Times==255)
  465.                                                  Times=12;
  466.          }
  467.        }
  468.                  
  469.      }
  470.    return Times;
  471. }
  472. /********************************************************/
  473. uint key_nian(uint Times)//年的加減
  474. {
  475.          if(key1==0)
  476.                  {
  477.                    delay(10);
  478.                          if(key1==0)
  479.                          {
  480.                                  while(key1==0)
  481.                                    display();
  482.                                  Times++;
  483.        }
  484.                           
  485.      }
  486.                  if(key2==0)
  487.                  {
  488.                    delay(10);
  489.                          if(key2==0)
  490.                          {
  491.                                  while(key2==0)
  492.                                    display();
  493.                                      Times--;
  494.                                  if(Times==1980)
  495.                                            Times=1980;
  496.        }
  497.                           
  498.      }
  499.    return Times;
  500. }
  501. /********************************************************/
  502. uchar key_xingqi(uchar Times)//星期的加減
  503. {
  504.          if(key1==0)
  505.                  {
  506.                    delay(10);
  507.                          if(key1==0)
  508.                          {
  509.                                  while(key1==0)
  510.                                    display();
  511.                                  Times+=4;
  512.                                  if(Times==28)
  513.                                          Times=0;
  514.        }
  515.                           
  516.      }
  517.                  if(key2==0)
  518.                  {
  519.                    delay(10);
  520.                          if(key2==0)
  521.                          {
  522.                                  while(key2==0)
  523.                                    display();
  524.                                      Times-=4;
  525.                                  if(Times==-4)
  526.                                            Times=24;
  527.        }
  528.                           
  529.      }
  530.    return Times;
  531. }
  532. void mins(uchar Temp)//不顯示shijian的動態顯示
  533. {

  534. /**********年月日*****************/
  535.           write_com(0x80);
  536.          if(Temp==7)
  537.          {
  538.                  write_date(' ');
  539.                  write_date(' ');
  540.                  write_date(' ');
  541.                  write_date(' ');
  542.          }
  543.          else
  544.          {
  545.           write_date(wendu[nian/1000]);//千位
  546.           write_date(wendu[nian%1000/100]);//百位
  547.           write_date(wendu[nian%100/10]);//十位
  548.           write_date(wendu[nian%10]);//個位
  549.          }
  550.           write_com(0x80+5);
  551.          if(Temp==6)
  552.          {
  553.                  write_date(' ');
  554.                  write_date(' ');
  555.          }
  556.          else
  557.          {
  558.           write_date(wendu[yue/10]);
  559.           write_date(wendu[yue%10]);
  560. ……………………

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

所有資料51hei提供下載:
wenduji.zip (114.92 KB, 下載次數: 31)




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

使用道具 舉報

沙發
ID:222394 發表于 2017-7-28 10:30 | 只看該作者
我這個是1604顯示溫度,按鍵控制步進電機的程序

#include<reg51.h>
#include"lcd.h"
#include"temp.h"
#define uchar  unsigned char
#define uint unsigned int
typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;
unsigned char keyval;
unsigned char ID;
uchar CNCHAR[6] = "攝氏度";
void LcdDisplay(int);
void UsartConfiguration();
  
sbit IN1=P1^0; /*第一個電機*/
sbit IN2=P1^1;        /*第一個電機*/
sbit IN3=P1^2;         /*第一個電機*/
sbit IN4=P1^3;         /*第一個電機*/
sbit IN5=P1^4;//高電位        使能口
sbit IN6=P1^5;//高電位        使能口
    uint j=100;
            uint g;

sbit k1=P3^6;         //定義P31口是k1
sbit k2=P3^5;        //按鍵
sbit k3=P1^7;        //按鍵
sbit k4=P1^6;        //按鍵
void delay(uint i);
//  void Go();
//  void zhong();
//  void fan();
//
void Go( )        //一檔
{
                         
     IN1=1;IN2=0;IN3=0;IN4=0;
   delay(150);

   IN1=1;IN2=1;IN3=0;IN4=0;
   delay(150);
   IN1=0;IN2=1;IN3=0;IN4=0;
   delay(150);

IN1=0;IN2=1;IN3=1;IN4=0;
  delay(150);
   IN1=0;IN2=0;IN3=1;IN4=0;
   delay(150);

   IN1=0;IN2=0;IN3=1;IN4=1;
   delay(150);
   IN1=0;IN2=0;IN3=0;IN4=1;
   delay(150);
   
  IN1=1;IN2=0;IN3=0;IN4=1;
   delay(150);
  }
  void zhong(void)          //二檔
{       
     IN1=1;IN2=0;IN3=0;IN4=0;
   delay(300);
  
   IN1=1;IN2=1;IN3=0;IN4=0;
   delay(300);
   IN1=0;IN2=1;IN3=0;IN4=0;
   delay(300);

IN1=0;IN2=1;IN3=1;IN4=0;
  delay(300);
   IN1=0;IN2=0;IN3=1;IN4=0;
   delay(300);

   IN1=0;IN2=0;IN3=1;IN4=1;
   delay(300);
   IN1=0;IN2=0;IN3=0;IN4=1;
   delay(300);
   
  IN1=1;IN2=0;IN3=0;IN4=1;
   delay(300);
  }
  void fan( )        //反轉
{
      IN1=1;IN2=0;IN3=0;IN4=1;
   delay(150);

    IN1=0;IN2=0;IN3=0;IN4=1;
   delay(150);
   IN1=0;IN2=0;IN3=1;IN4=1;
   delay(150);

IN1=0;IN2=0;IN3=1;IN4=0;
  delay(150);
   IN1=0;IN2=1;IN3=1;IN4=0;
   delay(150);

   IN1=0;IN2=1;IN3=0;IN4=0;
   delay(150);
   IN1=1;IN2=1;IN3=0;IN4=0;
   delay(150);
   
  IN1=1;IN2=0;IN3=0;IN4=0;
   delay(150);
  }
  void LcdDisplay(int temp)          //lcd顯示
{
   
          unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定義數組
        float tp;  
        if(temp< 0)                                //當溫度值為負數
          {
                  LcdWriteCom(0x80);                //寫地址 80表示初始地址
                SBUF='-';//將接收到的數據放入到發送寄存器
                while(!TI);                                 //等待發送數據完成
                TI=0;                                                 //清除發送完成標志位
            LcdWriteData('-');                  //顯示負
                //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;       
                //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
                //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算由?.5,還是在小數點后面。

          }
        else
          {                       
                  LcdWriteCom(0x80);                //寫地址 80表示初始地址
            LcdWriteData('+');                 //顯示正
                SBUF='+';//將接收到的數據放入到發送寄存器
                while(!TI);                                 //等待發送數據完成
                TI=0;                                                 //清除發送完成標志位
                tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
                //如果溫度是正的那么,那么正數的原碼就是補碼它本身
                temp=tp*0.0625*100+0.5;       
                //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
                //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
                //算加上0.5,還是在小數點后面。
        }
        datas[0] = temp / 10000;
        datas[1] = temp % 10000 / 1000;
        datas[2] = temp % 1000 / 100;
        datas[3] = temp % 100 / 10;
        datas[4] = temp % 10;

        LcdWriteCom(0x82);                  //寫地址 80表示初始地址
        LcdWriteData('0'+datas[0]); //百位
        SBUF = '0'+datas[0];//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;
       
        LcdWriteCom(0x83);                 //寫地址 80表示初始地址
        LcdWriteData('0'+datas[1]); //十位
        SBUF = '0'+datas[1];//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;

        LcdWriteCom(0x84);                //寫地址 80表示初始地址
        LcdWriteData('0'+datas[2]); //個位
        SBUF = '0'+datas[2];//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;

        LcdWriteCom(0x85);                //寫地址 80表示初始地址
        LcdWriteData('.');                 //顯示 ‘.’
        SBUF = '.';//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;

        LcdWriteCom(0x86);                 //寫地址 80表示初始地址
        LcdWriteData('0'+datas[3]); //顯示小數點  
        SBUF = '0'+datas[3];//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;

        LcdWriteCom(0x87);                 //寫地址 80表示初始地址
        LcdWriteData('0'+datas[4]); //顯示小數點
        SBUF = '0'+datas[4];//將接收到的數據放入到發送寄存器
        while (!TI);                                 //等待發送數據完成
        TI = 0;
        for(i=0; i<6; i++)
        {
                 SBUF = CNCHAR[i];//將接收到的數據放入到發送寄存器
                while (!TI);                                 //等待發送數據完成
                TI = 0;
        }

         
}
/*******************************************************************************
* 函 數 名         :UsartConfiguration()
* 函數功能                   :設置串口
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void UsartConfiguration()
{
        SCON=0X50;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
        TL1=0XF3;
//        ES=1;                                                //打開接收中斷
//        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數器
}

void wendu()
{
//         UsartConfiguration();
        LcdInit();                         //初始化LCD1602
        LcdWriteCom(0x88);        //寫地址 80表示初始地址
        LcdWriteData('C');
//        while(1)
//        {
                LcdDisplay(Ds18b20ReadTemp());
//                Delay1ms(100);//1s鐘刷一次
// }
}


/*******************************************************************************
* 函 數 名         : delay
* 函數功能                   : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 數 名         : keypros
* 函數功能                   : 按鍵處理函數,判斷按鍵K1是否按下
*******************************************************************************/
          void Time0_serve(void)interrupt 1 using 1
{
   
        TH0=(65536-200)/256;
    TL0=(65536-200)%256;

                          if(k1==0)
                     keyval=1;
                          if(k2==0)
                       keyval=2;
                            if(k3==0)
                         keyval=3;
                            if(k4==0)
                         keyval=4;
}
/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{       IN5=1;
            IN6=1;
       

//
//    if(k1==0){g=1;}
//        if(k2==0){g=2;}
//        if(k3==0){g=3;}
//        if(k4==0){g=4;}
//         if(g==1){zhong();}
//         if(g==2){Go();}
//         if(g==3){fan();}
//         if(g==4){wendu();}
//}
    IN5=1;
        IN6=1;
          while(1)
        {
//          TMOD=0x01;
//        EA=1;
//        ET0=1;
//        TR0=1;
//        TH0=(65536-200)/256;
//        TL0=(65536-200)%256;
//        keyval=0;
//        ID=0;
        keyval = 0;
             while(1)
                {

                        if(k1==0)
                             keyval=1;
                        if(k2==0)
                         keyval=2;
                        if(k3==0)
                         keyval=3;
                         if(k4==0)
                         keyval=4;          
                    switch(keyval)
                        {         
                            case 1 :zhong();
                                        break;
                            case 2 :Go();
                                        break;
                            case 3 :fan();
                                        break;
                             case 4 :wendu();
                                           break;
                        }
                }
               
        }               
}
回復

使用道具 舉報

板凳
ID:193210 發表于 2017-7-30 15:52 | 只看該作者
零度時空 發表于 2017-7-28 10:30
我這個是1604顯示溫度,按鍵控制步進電機的程序

#include

嗯  不錯的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.色综合| 免费成人在线网站 | 亚洲国产一区视频 | 免费视频久久 | 国产精品久久久久久久久久 | 日韩一二三 | 天天干夜夜操 | 国户精品久久久久久久久久久不卡 | 久久久久久国模大尺度人体 | 日韩欧美网 | 亚洲网在线 | 日日操天天射 | 国产性网| 久久国产成人 | 精品国产乱码久久久久久牛牛 | 91高清在线视频 | 国产毛片久久久久久久久春天 | 日韩欧美中文在线 | 91免费在线看 | www.亚洲视频.com | 国产精品欧美一区二区三区不卡 | 久久免费高清 | 国产精品美女www爽爽爽 | 午夜影视 | 日韩欧美一区二区三区在线播放 | 伊人av在线播放 | 四虎影院久久 | 毛片免费在线观看 | 久久久亚洲一区 | 久久大| 成人不卡视频 | 天天夜碰日日摸日日澡 | 亚洲精彩免费视频 | 午夜影院网站 | 亚洲国产成人精品一区二区 | 久久精品国产久精国产 | 91中文字幕在线 | 久久久久亚洲精品中文字幕 | 久久免费精品 | 国产专区视频 | 免费观看av网站 |