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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 974|回復: 3
收起左側

新手基于51單片機的溫度報警系統問題

[復制鏈接]
ID:1125977 發表于 2024-6-19 10:09 | 顯示全部樓層 |閱讀模式
設計一個具有溫度實時顯示的溫度檢測系統:
1.液晶屏LCD顯示當前溫度和設定溫度;
2.每1s采樣溫度,LCD更新顯示值;
3.溫度測量精度: 0.1"C;
4.通過按鍵設定溫度的上、下限,超過所設定的閾值,聲光報警。
但是我通過程序后液晶屏和燈無反應
程序如下
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);
}
}
}


報出的警告
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
回復

使用道具 舉報

ID:123289 發表于 2024-6-20 20:17 | 顯示全部樓層
程序中不要用DELAY!否則你照顧不過來這許多項。
回復

使用道具 舉報

ID:1126908 發表于 2024-6-25 12:08 | 顯示全部樓層
卡在哪個delay里面了
回復

使用道具 舉報

ID:53813 發表于 2024-6-27 11:02 | 顯示全部樓層
while(1)
{
display_lcd(th,tl);
display_lcd1();
}
......

也就是說,你上電初始化完成進入主函數后,一直在循環這些;然后,其他呢?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲最新网址 | 老司机免费视频 | 日韩一区二区三区精品 | 欧美日韩综合 | 天天操天天摸天天爽 | h视频网站在线观看 | 日一区二区| 欧美精品一区二区三 | 日本羞羞影院 | 国产在线网站 | 亚洲视频免费在线 | 欧美精品在线免费观看 | 一区二区av | 久久国产精品视频 | 欧美国产精品一区二区三区 | 伊人网国产| av片在线免费看 | 国产视频久久久 | 98久久| 日韩综合 | 国产男女精品 | 欧美一区二区三区日韩 | 久久久国产一区二区三区四区小说 | 欧美涩 | 精品视频在线观看 | 日本一区二区电影 | 亚洲第一福利视频 | 午夜羞羞| 欧美中文字幕一区二区三区 | 国产日韩欧美精品一区二区三区 | 精品国产18久久久久久二百 | 欧美a v在线| 一区二区三区成人 | 91porn在线| 日日操av | 国产精品美女久久久久久免费 | 成人久久18免费网站图片 | 国产成人精品免高潮在线观看 | 国产成人在线视频 | 精品视频免费 | 最新国产视频 |