📄 lcd.c
字号:
# include<reg52.h>
# include<stdio.h>
# include<intrins.h>
# define uchar unsigned char
# define uint unsigned int
sbit dc=P2^1; //RS
sbit rw=P2^2; //RW
sbit cs=P2^4; //E
sfr lcdbus=0x80;
char a[2]={3,5};
char b[6]={3,5,2,9,8,7};
uchar state;
uchar cmd;
void soft_nop(){}
/***********12MHZ 提供10MS 软件延时************/
void soft_10ms()
{ register int i;
for(i=0;i<711;i++);
}
/***********12MHZ 提供20MS 软件延时************/
void soft_20ms()
{ soft_10ms();
soft_10ms();
}
/****************检查LCD忙*******************/
bit lcd_checkbusy() /*检查LCD 忙*/
{register lcdstate;
dc=0; /*dc=1为数据,=0 为命令.*/
rw=1; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
lcdstate=lcdbus;
cs=0;
return((bit)(lcdstate&0x80));
}
/***************写LCD命令*******************/
void lcd_wrcmd(uchar lcdcmd)
{while(lcd_checkbusy());
dc=0; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
lcdbus=lcdcmd;
soft_nop();
cs=0;
}
/**************在当前显示位置显示数据********************/
void lcd_wrdata(char lcddata)
{while(lcd_checkbusy());
dc=1; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
lcdbus=lcddata;
soft_nop();
cs=0;
}
/*************在当前显示位置显示LCD 字符串***************/
void lcd_string(char *strpoint)
{ register i=0;
while(strpoint[i]!=0)
{lcd_wrdata(strpoint[i]);
i++;
}
}
/**********************初始化************************/
void lcd_init()
{lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
lcd_wrcmd(0x01); /*清除显示*/
}
/***********************主函数***********************/
void main()
{uchar i;
lcd_init();
soft_20ms();
state=1;
cmd=0X20;
switch(state) //送模式和单位
{
case 1: lcd_string("FREQUENCY");
lcd_wrcmd(0X8C);
if(cmd==0X40)
lcd_string("HZ");
else if(cmd==0X20)
lcd_string("KHZ");
else
lcd_string("MHZ");
break;
case 2: lcd_string("PERIOD");
lcd_wrcmd(0X8C);
if(cmd==0X40)
lcd_string("S");
else if(cmd==0X20)
lcd_string("MS");
else
lcd_string("US");
break;
case 3: lcd_string("MAIKUAN");
lcd_wrcmd(0X8C);
lcd_string("s");
break;
case 4: lcd_string("ZHANKONGBI");
}
lcd_wrcmd(0XC3); //送整数
for(i=0;i<2;i++)
{a[i]=a[i]+0X30;
lcd_wrdata(a[i]);
}
lcd_wrdata(46); //送小数点
for(i=0;i<6;i++) //送小数位
{b[i]=b[i]+0X30;
lcd_wrdata(b[i]);
}
for(;;);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -