?? lcd1602.c
字號:
#include"reg51.h"
#include"lcd1602.h"
#include"intrins.h"
#define XTAL 12
/******************** START *****************************/
void delay_xms(uchar x){ /*delay x ms */
uchar i;
for(;x>0;x--)
{ for(i=0;i<(uchar)(1000*XTAL/60-2/5);i++); } /*delay_1ms*/
}
/*產生一個使能脈沖*/
void En_Toggle(void)
{
LCD_EN=1;
_nop_();
LCD_EN=0;
_nop_();
}
/*檢測忙標志,忙則等待*/
void wait_until_ready(void)
{ uchar temp=0 ;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
LCD_DATA=0xff;
do{temp=LCD_DATA;}while(temp&0x80);
LCD_EN=0;
}
/*LCD1602初始化*/
void LCD_init(void)
{ delay_xms(5);
LCD_cmd(0x01); /*清顯示*/
LCD_cmd(0x38);
delay_xms(5); /*顯示模式設置*/
LCD_cmd(0x08); /*顯示關閉*/
delay_xms(5);
LCD_cmd(0x06); /*寫入數據后光標右移*/
LCD_cmd(0x0c); /*0x0c顯示開,不顯示光標 ;0x0f顯示光標*/
}
void LCD_cmd(uchar cmd)/*寫入控制命令,RS=0,RW=0*/
{
wait_until_ready();
LCD_RS=0;
LCD_RW=0;
_nop_();
LCD_DATA=cmd;
_nop_();
En_Toggle();
}
void LCD_char(char str)/*寫入要顯示的字符,RS=1,RW=0-*/
{
wait_until_ready();
LCD_RS=1;
LCD_RW=0;
_nop_();_nop_();_nop_();
LCD_DATA=str;
_nop_();_nop_();_nop_();
En_Toggle();
}
void setxy(uchar x,uchar y)/*設定顯示位置,行x=1/2,列y=1~16的任意整數*/
{
uchar temp=1;
if(x==1)
{ temp=0x80+y-1; LCD_cmd(temp); }
else
{ temp=0xC0+y-1; LCD_cmd(temp); }
}
/*寫字符串*/
void LCD_string(char *s)
{
for( ;*s!='\0';s++)LCD_char(*s);
}
/*************LCD1602 END ********************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -