📄 6 wendu.c
字号:
//////////////////////////////////////////////////////////////
//
// 1602子程序
//函数说明:delay(uchar d) 延时2us程序
// lcd_wrcmd(uchar cmd) 写命令子程序
// lcd_wrdata(uchar lcddata) 写数据子程序
// lcd_h() 建立自定义字符库
//
//////////////////////////////////////////////////////////////
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_bus P1
#define key_bus P2
uchar offset=0x80;
uchar d[2]={0x30,0x30};
uchar tem1[3];
uchar tem2[4];
uchar tplsb,tpmsb;
uchar temp1,temp2;
sbit rs=P0^5;
sbit rw=P0^6;
sbit e =P0^7;
sbit DQ=P3^3;
sbit alert=P0^0;
//sbit rs=P3^2;
//sbit rw=P3^3;
//sbit e =P3^4;
//sbit beep=P3^5;
sbit load=P2^0;
sbit sclk=P2^1;
sbit sdata=P2^2;
//年月摄氏度
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 str1[]="THE MIN SYSTEM";
uchar code str2[]="the tempreture:";
//uchar code str3[]="INPUT PHASE:";
uchar code str4[]="A: voltage"; //电压
uchar code str5[]="B: tempreture"; //温度
uchar code str6[]="C: input"; //标定
uchar code str7[]="D: help";
uchar code he[]="*:OK #:UP(clear)";
uchar code am[]="please input:";
//uchar code warn[]="WARNING!!VOLTAGE < 5V";
uchar state=0;
dac_tlc5620(uchar send_char)
{
uchar i;
load=1;
sclk=1;sdata=0;sclk=0;
sclk=1;sdata=0;sclk=0;
sclk=1;sdata=1;sclk=0;
for(i=0;i<8;i++)
{
sclk=1;
if(send_char&0x80) sdata=1;
else sdata=0;
sclk=0;
send_char=send_char<<1;
}
load=0;
load=1;
}
*/
//////////////////////////////////////////
delay(uchar d)
{
while(--d);
}
/**********判断忙标志,返回的是一个位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]);
}
/*****************读按键***************/
uchar getkey()
{
uchar keycode=0xff,temp,i;
key_bus=0x0f;
temp=key_bus&0x0f;
if(temp!=0x0f) //有键按下
{
// beep=0;
key_bus=0x7f;
for(i=0;i<4;i++)
{
temp=key_bus&0x0f;
if(temp==0x07)
{
keycode=i*4;
break;
}
else if(temp==0x0b)
{
keycode=i*4+1;
break;
}
else if(temp==0x0d)
{
keycode=i*4+2;
break;
}
else if(temp==0x0e)
{
keycode=i*4+3;
break;
}
key_bus=(key_bus>>1)|0x80;
}
while((key_bus&0x0f)!=0x0f) //等待释放
{
key_bus=0x0f;
}
// beep=1;
}
return keycode;
}
welcome()
{
uchar temp,i;
lcd_wrcmd(0x0c);
lcd_wrcmd(0x82);
for(i=0;i<14;i++)
lcd_wrdata(str1[i]);
lcd_h();
lcd_wrcmd(0xc4);
lcd_wrdata('2'); lcd_wrdata('0');lcd_wrdata('0');lcd_wrdata('7');
lcd_wrdata(0);
lcd_wrdata('0');lcd_wrdata('7');
lcd_wrdata(1);
while(1)
{
temp=getkey();
if(temp!=0xff) //按任意键跳转
{
state=1;
lcd_wrcmd(1);
break;
}
}
}
phase()
{
uchar i,j,cnt=0;
lcd_wrcmd(0x0f);
lcd_wrcmd(0xc9);
lcd_wrdata(2);
lcd_wrcmd(0x83);
for(i=0;i<12;i++)lcd_wrdata(str3[i]);
lcd_wrcmd(0xc5);
while(1) //按键处理
{
i=getkey();
if(i<10)
{ cnt++;
if(cnt<=3)
{
lcd_wrcmd(0xc5+cnt-1);
lcd_wrdata(0x30+i);
}
else
{
cnt=0;
lcd_wrcmd(0xc5);
for(j=0;j<=3;j++)
lcd_wrdata(' ');
lcd_wrcmd(0xc5);
}
}
else if(i==10)
{
state=1;
lcd_wrcmd(0x0c);
lcd_wrcmd(1);
lcd_wrcmd(0x80);
break;
}
else if(i==11)
{
cnt=0;
lcd_wrcmd(0xc5);
for(j=0;j<=3;j++)
lcd_wrdata(' ');
lcd_wrcmd(0xc5);
}
}
}
frequency()
{
uchar i,j,cnt=0; // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值
lcd_wrcmd(0x80); //会出现光标乱跳的错误
lcd_wrcmd(0xce);
lcd_wrdata('H');
lcd_wrdata('Z');
lcd_wrcmd(0x81);
for(i=0;i<15;i++)lcd_wrdata(str2[i]);
lcd_wrcmd(0x0f);
lcd_wrcmd(0xc0);
while(1) //按键处理
{
i=getkey();
if(i<10)
{ cnt++;
if(cnt<=10)
{
lcd_wrcmd(0xc0+cnt-1);
lcd_wrdata(0x30+i);
}
else
{
cnt=0;
lcd_wrcmd(0xc0);
for(j=0;j<=10;j++)
lcd_wrdata(' ');
lcd_wrcmd(0xc0);
}
}
else if(i==10)
{
state=1;
lcd_wrcmd(0x0c);
lcd_wrcmd(1);
lcd_wrcmd(0x80);
break;
}
else if(i==11)
{
cnt=0;
lcd_wrcmd(0xc0);
for(j=0;j<=10;j++)
lcd_wrdata(' ');
lcd_wrcmd(0xc0);
}
}
}
warning()
{
uchar i,ii;
lcd_wrcmd(1);
lcd_wrcmd(0x0c);
lcd_wrcmd(0x83);
for(i=0;i<9;i++)
lcd_wrdata(warn[i]);
lcd_wrcmd(0xc1);
for(i=0;i<12;i++)
lcd_wrdata(warn[i+9]);
while(1)
{
ii=getkey();
if(ii!=0xff)
{
lcd_wrcmd(1);
break;
}
}
}
uchar dac_convert(uchar *amp)
{
uint v;
v=amp[2]*100+amp[1]*10+amp[0];
if(v<500)
{
v=32*v;
dac_tlc5620(v/100);
return 0;
}
else
{
return 1;
}
}
amplitude()
{
uchar i,ii;
uchar amp[3],t=0;
lcd_wrcmd(0x80);
for(i=0;i<16;i++)
lcd_wrdata(am[i]);
lcd_wrcmd(0xcc);
lcd_wrdata('V');
lcd_wrcmd(0xc8);
lcd_wrdata('.');
lcd_wrcmd(0x0f); //开光标
lcd_wrcmd(0xc7);
while(1)
{
ii=getkey();
if(ii==10)
{
if(t==4)
{
if(dac_convert(amp))
{
warning();
break;
}
}
lcd_wrcmd(0x0c);
state=1;
lcd_wrcmd(1);
break;
}
if(ii<10)
{
t++;
if(t==1)
{
lcd_wrcmd(0xc9);
}
if(t==2)t++;
if(t==1)amp[2]=ii;
else if(t==3)amp[1]=ii;
else if(t==4)amp[0]=ii;
if(t==5)
{
t=0;
lcd_wrcmd(0xc7);
lcd_wrdata(' '); lcd_wrdata('.');lcd_wrdata(' ');lcd_wrdata(' ');
lcd_wrcmd(0xc7);
}
else
{
lcd_wrcmd(0xc6+t);
lcd_wrdata(0x30+ii);
}
}
}
}
*/
///////////////////////////////////输入函数////////////////////////////////////
/*****************************************/
/*****************************************/
/* 延时t毫秒 */
void delay2(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
/* 产生复位脉冲初始化DS18B20 */
void TxReset(void)
{
uint i;
DQ = 0;
/* 拉低约900us */
i = 100;
while (i>0) i--;
DQ = 1; // 产生上升沿
i = 4;
while (i>0) i--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -