#include "delay.h" #define dataport PORTB //定义数据寄存器端口 #define dirport_data DDRB //定义方向寄存器端口 #define conport PORTA #define dirport_con DDRA #define LCD_E (1 << 6) //引脚定义 #define LCD_RS (1 << 4) #define LCD_RW (1 << 5) #define lcd_set_e() (conport |= LCD_E) //置位与清零 #define lcd_set_rs() (conport |= LCD_RS) #define lcd_set_rw() (conport |= LCD_RW) #define lcd_clear_e() (conport &= ~LCD_E) #define lcd_clear_rs() (conport &= ~LCD_RS) #define lcd_clear_rw() (conport &= ~LCD_RW) /*********************************************************/ void lcd_pulse(void); //产生LCD所需的短脉冲 void lcd_wait(void); //等待 void lcd_send(unsigned char data); //向LCD写一个字节数据 void clrscr(void); //清屏函数 void gotoz(unsigned char z); //定位坐标 void gotoxy(unsigned char x,unsigned char y); //定位字符位置 void put_char(char c); //向LCD写字符 void outtext(char* text); //向LCD写字符串 void initgraph(void); //初始化LCD /**************************************************************************************/ //函数名 :lcd_pulse //属性 :私有 //功能 :产生LCD所需的短脉冲 //输入参数 :无 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void lcd_pulse(void) { lcd_set_e(); delay_nms(1); lcd_clear_e(); delay_nms(1); } /**************************************************************************************/ //函数名 :lcd_wait //属性 :私有 //功能 :延时等待 //输入参数 :无 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void lcd_wait(void) // medium delay (long for lcd, but much less than a second) { asm("nop"); } /**************************************************************************************/ //函数名 :lcd_send //属性 :私有 //功能 :写一个字符到LCD //输入参数 :data--要显示的字符 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void lcd_send(unsigned char data) // send byte to lcd { lcd_wait(); dataport = data; lcd_pulse(); } /**************************************************************************************/ //函数名 :clrscr //属性 :私有 //功能 :清除屏幕 //输入参数 :无 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void clrscr(void) // clear screen { lcd_clear_rs(); lcd_clear_rw(); lcd_send(0x01); lcd_wait(); } /**************************************************************************************/ //函数名 :gotoz //属性 :私有 //功能 :坐标定位 //输入参数 :z--位置 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void gotoz(unsigned char z) // goto lcd memory address { lcd_clear_rs(); lcd_clear_rw(); lcd_send(z | 0x80); } /**************************************************************************************/ //函数名 :gotoxy //属性 :私有 //功能 :在LCD上的位置 //输入参数 :x--字符的列;y--字符的行 //输出参数 : //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void gotoxy(unsigned char x,unsigned char y) { gotoz((x)|((y)<<6)); } /**************************************************************************************/ //函数名 :put_char //属性 :私有 //功能 :在LCD上显示一个字符 //输入参数 :c--要显示的字符 //输出参数 : //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void put_char(char c) // output single character { lcd_clear_rw(); lcd_set_rs(); lcd_send(c); } /**************************************************************************************/ //函数名 :outtext //属性 :私有 //功能 :输出字符串到LCD显示 //输入参数 :text--要显示的字符串 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void outtext(char* text) // output string { unsigned char i; for(i = 0; text[i] && i < 16; i++) put_char(text[i]); } /**************************************************************************************/ //函数名 :initgraph //属性 :私有 //功能 :初始化LCD //输入参数 :无 //输出参数 :无 //返回值 : //修改日期 : //修改人 : /**************************************************************************************/ void initgraph(void) // init display { dirport_data = 0xFF; dirport_con |= (LCD_E | LCD_RS | LCD_RW); lcd_clear_rs(); lcd_clear_rw(); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x3C); lcd_send(0x06); lcd_send(0x0C); }