?? 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 + -