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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

求大神幫忙看看單片機代碼哪里錯了,萬分感謝,比較急

查看數: 1862 | 評論數: 3 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2020-6-25 19:36

正文摘要:

#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar temp,num,klnum; uchar code table[]={"18B20 OKTL"}; char shangxiaxian[2]={-10,10}; char a; ...

回復

ID:789718 發表于 2020-6-26 20:48
隨風飄遠 發表于 2020-6-26 10:08
軟件會提示錯誤在哪一行,其實 還是要自己學會去調試,剛開始先寫一些簡單一點的代碼會容易一點

請問您有時間幫我看一下這個錯誤怎么改嗎?
ID:319023 發表于 2020-6-26 10:08
軟件會提示錯誤在哪一行,其實 還是要自己學會去調試,剛開始先寫一些簡單一點的代碼會容易一點
ID:213173 發表于 2020-6-26 06:32
錯誤很多,基本都是抄寫錯誤。大小寫錯誤、中文符號錯誤、丟分號,缺空格等等,F已通過編譯。
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar temp,num,klnum;
  6. uchar code table[]={"18B20 OKTL"};
  7. char shangxiaxian[2]={-10,10};
  8. char a;
  9. sbit k1=P1^0;
  10. sbit k2=P1^1;
  11. sbit k3=P1^2;
  12. sbit k4=P1^3;
  13. sbit LCD_RW=P2^5;
  14. sbit lcdrs=P2^6;
  15. sbit lcden=P2^7;
  16. sbit Beep=P3^0;
  17. sbit led=P3^1;
  18. sbit DQ=P3^7;    /*液晶顯示屏的延時程序*/
  19. void delay(uint z)
  20. {
  21.         uint x,y;
  22.         for(x=z;x>0;x--)
  23.                 for(y=110;y>0;y--);
  24. }
  25. /*溫度傳感器的延時程序*/
  26. void Delay1(uint y)
  27. {
  28.         uint x;
  29.         for( ;y>0; y--)
  30.         {
  31.                 for(x=110;x>0;x--);
  32.         }
  33. }
  34. /*蜂鳴器,18B20寫數據函數的延時程序*/
  35. void delay2(uint a)
  36. {
  37.         while(--a);
  38. }
  39. /*溫度傳感器初始化函數*/
  40. void init_18B20()
  41. {
  42.         DQ=1;
  43.         delay2(8);
  44.         DQ=0;
  45.         delay2(90);
  46.         DQ=1;
  47.         _nop_();
  48.         _nop_();
  49.         delay2(100);
  50.         DQ=1;
  51. }
  52. /*溫度傳感器寫字節命令函數*/
  53. void DS18B20xiezijie(uchar date)
  54. {
  55.         uchar i;
  56.         for(i=0;i<8;i++)
  57.         {
  58.                 DQ=0;                                      //在寫入一位數據之前先把總線拉低
  59.                 DQ=date&0x01;                   //寫入一個數據,從最低位開始寫
  60.                 delay2(5);                               //延時
  61.                 DQ=1;                                      //將總線拉高,等待第二位數據寫入
  62.                 date>>=1;                              //右移一位,寫入第二位數據
  63.         }
  64. }                                                          /*溫度傳感器讀字節命令函數*/
  65. uchar DS18B20duzijie()
  66. {
  67.         uchar i,dat=0;
  68.         DQ=1;
  69.         _nop_();
  70.         for(i=0;i<8;i++)
  71.         {
  72.                 DQ=0;                  //先將總線拉低
  73.                 _nop_();
  74.                 _nop_();
  75.                 dat>>=1;
  76.                 DQ=1;                                      //然后釋放總線
  77.                 _nop_();                         //延時一下等待數據穩定
  78.                 _nop_();                        
  79.                 if(DQ)
  80.                 dat|=0x80;                             //讀取數據,從最低位開始讀取
  81.                 delay2(30);                             //讀取完之后等待一下,再接著讀取下一個數
  82.                 DQ=1;
  83.         }
  84.         return dat;                        //返回所讀到的溫度
  85. }                                                        /*寫溫度轉換命令函數*/
  86. void DS18B20ChangTemp()
  87. {
  88.         init_18B20();
  89.         Delay1(1);
  90.         DS18B20xiezijie(0xcc);   //跳過ROM操作命令
  91.         DS18B20xiezijie(0x44);   //溫度轉換命令
  92. }                                                          /*讀溫度命令函數*/
  93. void DS18B20ReadTempCom()
  94. {
  95.         init_18B20();
  96.         Delay1(1);
  97.         DS18B20xiezijie(0xcc);   //跳過ROM操作命令
  98.         DS18B20xiezijie(0xbe);   //發送讀取溫度命令
  99. }                                                          /*讀溫度函數*/
  100. int DS18B20ReadTemp()
  101. {
  102.         int temp=0;
  103.         uchar tmh,tml;
  104.         DS18B20ChangTemp();           //先寫入轉換命令
  105.         DS18B20ReadTempCom();     //然后等待轉換完成后發送讀取溫度命令
  106.         tml=DS18B20duzijie();             //讀取溫度值共16位,先讀低字節
  107.         tmh=DS18B20duzijie();           //再讀高字節
  108.         temp=tmh;
  109.         temp<<=8;
  110.         temp|=tml;
  111.         return temp;                              /*液晶屏寫指令函數*/
  112. }
  113. void write_com(uchar com)
  114. {
  115.         lcdrs=0;
  116.         lcden=0;
  117.         LCD_RW=0;
  118.         P0=com;
  119.         delay(5);
  120.         lcden=1;
  121.         delay(5);
  122.         lcden=0;
  123. }                                                          /*液晶屏寫指令函數*/
  124. void write_com2(int com)
  125. {
  126.         lcdrs=0;
  127.         LCD_RW=0;
  128.         lcden=0;
  129.         delay(5);
  130.         P0=com;
  131.         delay(5);
  132.         lcden=1;
  133.         delay(5);
  134.         lcden=0;
  135.         P0=(com&0x0f)<<4;
  136.         delay(5);
  137.         lcden=1;
  138.         delay(5);
  139.         lcden=0;
  140. }                                                          /*液晶屏寫數據命令函數*/
  141. void write_data(char date)
  142. {
  143.         lcdrs=1;
  144.         LCD_RW=0;
  145.         lcden=0;
  146.         P0=date;
  147.         delay(5);
  148.         lcden=1;
  149.         delay(5);
  150.         lcden=0;
  151.         lcdrs=1;
  152.         LCD_RW=0;
  153.         lcden=0;
  154.         P0=(date&0x0f)<<4;       //一次寫入4位
  155.         delay(5);
  156.         lcden=1;
  157.         delay(5);
  158.         lcden=0;
  159. }                                                          /*液晶屏初始化函數*/
  160. void init()
  161. {
  162.         lcden=0;
  163.         write_com(0x28);
  164.         write_com2(0x28);
  165.         write_com2(0x0c);
  166.         write_com2(0x06);
  167.         write_com2(0x01);
  168.         write_com2(0x80);
  169. }                                                          /*報警上下線處理函數*/
  170. void write_hl(uchar add,char date)
  171. {
  172.         uchar bai,shi,ge;
  173.         if(date<0){date=-date;}
  174.         bai=date/100;
  175.         shi=date%100/10;
  176.         ge=date%100%10;
  177.         write_com2(0x80+0x40+add);
  178.         write_data(0x30+bai);
  179.         write_data(0x30+shi);
  180.         write_data(0x30+ge);
  181. }                                                        /*報警上下線處理函數*/
  182. void write_hl1(uchar add,char date)
  183. {
  184.         uchar bai,shi,ge;
  185.         if(date<0){date=-date;}
  186.         bai=date/100;
  187.         shi=date%100/10;
  188.         ge=date%100%10;
  189.         write_com2(0x80+add);
  190.         write_data(0x30+bai);
  191.         write_data(0x30+shi);
  192.         write_data(0x30+ge);
  193. }                                                        /*液晶屏顯示函數,顯示溫度值*/
  194. void Lcdxianshi(int temp)
  195. {
  196.         uchar sz[4]={0,0,0,0};
  197.         unsigned char datas[]={0,0,0,0,0}; //定義數組
  198.         float tp;
  199.         if(temp<0)                //當溫度值為負數
  200.         {
  201.                 write_com2(0x80+0x40);    //寫地址80表示初始地址
  202.                 write_data('-');          //顯示負
  203.                 temp=temp-1; //因為讀取的溫度是實際溫度的補碼,所以減一,再取反求出原碼
  204.                 temp=~temp;
  205.                 tp=temp;
  206.                 temp=tp*0.0625*100+0.5;
  207.         }
  208.         else
  209.         {
  210.                 write_com2(0x80+0x40);  //寫地址80表示初始地址
  211.                 write_data('+');                    //顯示正
  212.                 tp=temp;  //因為數據處理有小數點,所以將溫度賦給一個浮點型變量,如果溫度是正,那么正數的原碼就是補碼本身
  213.                 temp=tp*0.0625*100+0.5;
  214.         }
  215.         datas[0]=temp/10000;                       //百位
  216.         datas[1]=temp%10000/1000;          //十位
  217.         datas[2]=temp%1000/100;       //個位
  218.         datas[3]=temp%100/10;                          //小數
  219.         write_com2(0x80+0x40+1);
  220.         write_data('0'+datas[0]);
  221.         write_com2(0x80+0x40+2);
  222.         write_data('0'+datas[1]);
  223.         write_com2(0x80+0x40+3);
  224.         write_data('0'+datas[2]);
  225.         write_com2(0x80+0x40+4);
  226.         write_data('.');
  227.         write_com2(0x80+0x40+5);
  228.         write_data('0'+datas[3]);
  229.         a=(datas[0]*100+datas[1]*10+datas[2]);  //用于溫度的比較值
  230.         write_hl(13,shangxiaxian[1]);  //顯示報警上限
  231.         write_hl1(13,shangxiaxian[0]);      //顯示報警下限
  232. }                                                                         /*按鍵處理函數,用于設置溫度報警值*/
  233. void key()
  234. {
  235.         if(k1==0)
  236.         {
  237.                 delay(5);
  238.                 if(k1==0)  //溫度報警下限加
  239.                 {
  240.                         shangxiaxian[0]++;
  241.                         if(shangxiaxian[0]==127)
  242.                                 shangxiaxian[0]=126;
  243.                         write_hl1(13,shangxiaxian[0]);
  244.                 }
  245.         }
  246.         if(k2==0)  //溫度報警下限減
  247.         {
  248.                 delay(5);
  249.                 if(k2==0)
  250.                 {
  251.                         shangxiaxian[0]--;
  252.                         if(shangxiaxian[0]==-56)
  253.                                 shangxiaxian[0]=-55;
  254.                         write_hl1(13,shangxiaxian[0]);
  255.                 }
  256.         }
  257.         if(k3==0)  //溫度報警上限加
  258.         {
  259.                 delay(5);
  260.                 if(k3==0)
  261.                 {
  262.                         shangxiaxian[1]++;
  263.                         if(shangxiaxian[1]==127)
  264.                                 shangxiaxian[1]=126;
  265.                         write_hl(13,shangxiaxian[1]);
  266.                 }
  267.         }
  268.         if(k4==0)  //溫度報警上限減
  269.         {
  270.                 delay(5);
  271.                 if(k4==0)
  272.                 {
  273.                         shangxiaxian[1]--;
  274.                         if(shangxiaxian[1]==-56)
  275.                                 shangxiaxian[1]=-55;
  276.                         write_hl(13,shangxiaxian[1]);
  277.                 }
  278.         }
  279. }
  280. void main()
  281. {
  282.         int b;
  283.         init();
  284.         led=0;
  285.         for(num=0;num<11;num++)   //讓液晶屏顯示“18B20 OK TL”
  286.         {
  287.                 write_data(table[num]);
  288.                 delay(20);
  289.         }
  290.         write_com2(0x80+0x40+9);
  291.         write_data('T');
  292.         write_com2(0x80+0x40+10);
  293.         write_data('H');
  294.         while(1)
  295.         {
  296.                 key();
  297.                 Lcdxianshi(DS18B20ReadTemp());
  298.                 delay(100);
  299.                 if(shangxiaxian[0]<0)
  300.                 {
  301.                         write_com2(0x80+12);
  302.                         write_data('-');
  303.                 }
  304.                 else
  305.                 {
  306.                         write_com2(0x80+12);
  307.                         write_data('+');
  308.                 }
  309.                 if(shangxiaxian[1]<0)
  310.                 {
  311.                         write_com2(0x80+0x40+12);
  312.                         write_data('-');
  313.                 }
  314.                 else
  315.                 {
  316.                         write_com2(0x80+0x40+12);
  317.                         write_data('+');
  318.                 }
  319.                 if(a>shangxiaxian[1])    //判斷溫度值與報警值的大小
  320.                 {
  321.                         write_com2(0x80+0x40+6);
  322.                         write_data('<');
  323.                         write_com2(0x80+0x40+7);
  324.                         write_data('L');
  325.                 }
  326.                 if(a>=shangxiaxian[0]&&a<=shangxiaxian[1]) //判斷溫度值與報警值的大小
  327.                 {
  328.                         write_com2(0x80+0x40+6);
  329.                         write_data(' ');
  330.                         write_com2(0x80+0x40+7);
  331.                         write_data('!');
  332.                 }
  333.                 if(a>shangxiaxian[0]||a>shangxiaxian[1])  //如果溫度值在報警值之外,蜂鳴器響
  334.                 {
  335.                         for(b=0;b<1000;b++)
  336.                         {
  337.                                 Beep=1;led=1;
  338.                                 delay2(20);
  339.                                 Beep=0;led=0;
  340.                                 delay(20);
  341.                         }
  342.                 }
  343.         }
  344. }

復制代碼

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人在线视频 | 久久国产美女视频 | 久久久久午夜 | 国产精品视频综合 | 狠狠色狠狠色综合系列 | 久久99网| 国产精品久久久久久久久久久免费看 | 亚洲在线一区二区三区 | 亚洲欧美激情四射 | 国产精品久久久久999 | 久久国产综合 | 国产区视频在线观看 | 国产精品毛片无码 | 91xxx在线观看 | 久热精品在线观看视频 | 日韩成人影院在线观看 | 高清不卡毛片 | 日本黄色免费大片 | 在线观看成人小视频 | 国产欧美视频一区 | 麻豆成人在线视频 | 精品国产一区二区三区日日嗨 | 国产精品久久久久久久久久久久 | yiren22 亚洲综合 | 欧美在线a | 永久免费在线观看 | 国产激情一区二区三区 | 亚洲一区二区国产 | 男女一区二区三区 | 在线观看免费毛片 | 欧美五月婷婷 | 中文字幕在线视频观看 | 国产欧美精品一区二区 | 欧美不卡一区二区 | 欧美一级淫片007 | 精品一区精品二区 | 日韩成人精品一区 | 国产精品不卡 | 国产日韩一区二区三区 | 精品视频在线一区 | 久久www免费视频 |