找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

新手基于51單片機(jī)的溫度報(bào)警系統(tǒng)問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)一個(gè)具有溫度實(shí)時(shí)顯示的溫度檢測(cè)系統(tǒng):
1.液晶屏LCD顯示當(dāng)前溫度和設(shè)定溫度;
2.每1s采樣溫度,LCD更新顯示值;
3.溫度測(cè)量精度: 0.1"C;
4.通過(guò)按鍵設(shè)定溫度的上、下限,超過(guò)所設(shè)定的閾值,聲光報(bào)警。
但是我通過(guò)程序后液晶屏和燈無(wú)反應(yīng)
程序如下
1602.h
#include<reg51.h>
#include<intrins.h>
sbit RS=P3^6;
sbit RW=P3^5;
sbit E=P3^3;
void lcd_w_cmd(unsigned char com);
void lcd_w_dat(unsigned char dat);
unsigned char lcd_r_start();
void int1();
void delay(unsigned char t);
void delay1();

void delay(unsigned char t)
{
unsigned char j,i;
for(i=0;i<t;i++)
for(j=0;j>50;j++);
}
void delay1()
{
_nop_();
_nop_();
_nop_();
}
void int1()
{
lcd_w_cmd(0x38);
lcd_w_cmd(0x0C);
lcd_w_cmd(0x01);
lcd_w_cmd(0x06);
}
unsigned char lcd_r_start()
{
unsigned char s;
RW=1;
delay1();
RS=0;
delay1();
E=1;
delay1();
s=P0;
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s);
}
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do{
i=lcd_r_start();
i=i&0x80;
delay(2);
}
while(i!=0);
RW=0;
delay1();
RS=0;
delay1();
E=1;
delay1();
P0=com;
delay1();
E=0;
delay1();
RW=1;
delay(25);
}
void lcd_w_dat(unsigned char dat)
{
unsigned  char i;
do{
i=lcd_r_start();
i=i&0x80;
delay(2);
}
while(i!=0);
RW=0;
delay1();
RS=1;
delay1();
E=1;
delay1();
P0=dat;
delay1();
E=0;
delay1();
RW=1;
delay(25);
}


18b20.h
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^7;
uint temp,t;
uchar data disdata[5];
void delay_18B20(unsigned int i)
{
while(i--);
}
void delay1ms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
//DS18B20初始化
void Init_DS18B20(void)          
{
unsigned char x=0;
DQ=1;
delay_18B20(80);
DQ=0;
delay_18B20(800);
DQ=1;
delay_18B20(140);
x=DQ;
delay_18B20(200);
}
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(40);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
unsigned char i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(50);
DQ=1;
dat>>=1;
}
}
unsigned int ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int temp_value=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(100);
a=ReadOneChar();
b=ReadOneChar();
temp_value=b<<8;
temp_value|=a;
return temp_value;
}
void writete()
{
uchar tflag;
while(1)
{
temp=ReadTemp();
if(temp<0x7ff)
{
tflag=0;
}
else
{
tflag=1;
temp=(~temp)+1;
}
t=temp*0.625;
}
}


main.c(123456.c)
#include<reg51.h>
#include<1602.h>
#include<18b20.h>
#define uchar unsigned char
sbit key_c=P2^3;           //切換
sbit key_jia=P2^4;           //增加
sbit key_jian=P2^5;           //減少
sbit led1=P2^1;                   //綠燈
sbit led2=P2^0;                   //紅燈
sbit BEEP=P2^2;                   //蜂鳴器
void key();
uchar th=30,tl=20;
uchar num=0;
unsigned char we[]={"T:     "};
unsigned char table[]={"H:     L:     "};
void display_lcd1();
void display_lcd(unsigned char th,tl);
void display_lcd1()
{
unsigned char k;
we[2]=t/1000+0x30;
we[3]=t%1000/100+0x30;
we[4]=t%1000%100/10+0x30;
we[5]='.';
we[6]=t%1000%100%10+0x30;
lcd_w_cmd(0x80);
delay(2);
for(k=0;k<9;k++)
{
lcd_w_dat(we[k]);
delay(2);
}
}

void display_lcd(unsigned char th,tl)
{
unsigned char i;
table[2]=th/10+0x30;
table[3]=th%10+0x30;
table[9]=tl/10+0x30;
table[10]=tl%10+0x30;
lcd_w_cmd(0xc0);
delay(2);
for(i=0;i<15;i++)
{
lcd_w_dat(table[i]);
delay(2);
}
}

void main()
{
while(1)
{
display_lcd(th,tl);
display_lcd1();
}
led1=0;
led2=1;
BEEP=1;

if(temp>th*10||temp<tl*10)
{
led1=1;
led2=~led2;
BEEP=~BEEP;
}
else
{
led1=0;
led2=1;
BEEP=1;
}
}

void key()
{
if(!key_c)
{
delay(5);
if(!key_c)
{
num++;
while(key_c==0);
if(num==2)
{
num=0;
}
}
}
if(!key_jia && num==0)
{
delay(5);
if(!key_jia && num==0)
{
th++;
while(key_jia);
lcd_w_cmd(0x80);
}
}
else if(!key_jian && num==0)
{
delay(5);
if(!key_jian && num==0)
{
th--;
while(key_jian);
lcd_w_cmd(0x80);
}
}
if(!key_jia && num==0)
{
delay(5);
if(!key_jia && num==0)
{
tl++;
while(key_jia);
lcd_w_cmd(0x80);
}
}
else if(!key_jian && num==0)
{
delay(5);
if(!key_jian && num==0)
{
tl--;
while(key_jian);
lcd_w_cmd(0x80);
}
}
}


報(bào)出的警告
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?INT1?123456
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAY1MS?123456
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?WRITETE?123456
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?KEY?123456
Program Size: data=45.0 xdata=0 code=1562

屏幕截圖 2024-06-19 091557.png (309.83 KB, 下載次數(shù): 24)

屏幕截圖 2024-06-19 091557.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2024-6-20 20:17 | 只看該作者
程序中不要用DELAY!否則你照顧不過(guò)來(lái)這許多項(xiàng)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1126908 發(fā)表于 2024-6-25 12:08 | 只看該作者
卡在哪個(gè)delay里面了
回復(fù)

使用道具 舉報(bào)

地板
ID:53813 發(fā)表于 2024-6-27 11:02 | 只看該作者
while(1)
{
display_lcd(th,tl);
display_lcd1();
}
......

也就是說(shuō),你上電初始化完成進(jìn)入主函數(shù)后,一直在循環(huán)這些;然后,其他呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表