📄 collection.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_bus P1
uchar offset=0x80;
uchar d[2]={0x30,0x30};
uchar tem1[3];
uchar tem2[4];
uchar lsb,msb;
uchar temp1,temp2;
sbit p_3=P3;
sbit rs=P0^5;
sbit rw=P0^6;
sbit e =P0^7;
sbit BEEP=0x97;
//年月摄氏度
uchar code hanzi[]={0x80,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,
0xf,0x9,0xf,0x9,0xf,0x9,0x11,0,
0x1C,0x14,0x1C,0x0,0x0,0x0,0x00,0x00,
0x06,0x08,0x10,0x10,0x10,0x08,0x06,0x00};
uchar code table[15]={0,0x30,0,0x2e,0x37,0x38,0x39,0,0x34,0x35,0x36,0,0x31,0x32,0x33};
uchar code num[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar code warn[]="WARNING!!tempreture is too high";
delay(uchar d)
{
while(--d);
}
/* 延时t毫秒 */
void delay2(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
/**********判断忙标志,返回的是一个位BF**********/
bit lcd_busy(void)
{
uchar bflag;
rs=0;
rw=1;
_nop_();
e=1;
_nop_();
lcd_bus=0xff;
bflag=lcd_bus;
e=0;
return(bit)(bflag&0x80); //BF=1 busy
}
/*********写命令,有两个参数,第一个是要写的命令控制字,
第二个是用来控制是否进行忙标志的判断。
busyflag=1:判断;为 0:不判断****************/
void lcd_wrcmd(uchar cmd)
{
while(lcd_busy());
lcd_bus=cmd;
rs=0;
rw=0;
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}
/************向液晶片写数据***************/
void lcd_wrdata( uchar lcddata)
{
while(lcd_busy());
lcd_bus=lcddata;
rs=1;
rw=0;
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}
/****************初始化***************/
void lcd_ini(void)
{
lcd_wrcmd(0x38);
delay(100);
lcd_wrcmd(0x0c);
delay(100);
lcd_wrcmd(0x06);
delay(100);
lcd_wrcmd(0x01);
delay(100);
}
// 生成汉字子模函数
// 当lcd_wrdata(0);显示第一个汉字
// 当lcd_wrdata(1);显示第二个汉字
lcd_h()
{
uchar i;
lcd_wrcmd(0x40);
for(i=0;i<32;i++) lcd_wrdata(hanzi[i]);
}
tempreture()
{
uchar i,j;
lcd_wrcmd(0x80);
while(1)
{
if(p_3&0x0f!=0)
lsb=p_3;
if(p_3&0xf0!=0)
msb=p_3;
temp1=(msb<<4)|(lsb>>4);
temp2=lsb&0x0f;
tem1[0]=temp1/100;
temp1=temp1%100;
tem1[1]=temp1/10;
temp1=temp1%10;
tem1[2]=temp1;
temp2=temp2*625;
tem2[0]=temp2/1000;
temp2=temp2%1000;
tem2[1]=temp2/100;
temp2=temp2%100;
tem2[2]=temp2/10;
temp2=temp2%10;
tem2[3]=temp2;
lcd_wrcmd(0xc0); //显示当前温度
for(i=0;i<3;i++)
lcd_wrdata(num[tem1[i]]);
lcd_wrdata('.');
lcd_wrcmd(0xc4);
for(i=0;i<4;i++)
lcd_wrdata(num[tem2[i]]);
lcd_wrdata(2);
lcd_wrdata('C');
}
}
warning(uchar a)
{
if(a>31)
{lcd_wrcmd(warning[]);
while(1)
{beep=0;
delay2(1000);
beep=1;
delay2(1000);
if(sw1==0)break;
}
main()
{
lcd_bus=0xff;
lcd_ini();
while(1)
{
tempreture();
warning();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -