三九宝宝网宝宝教育教学论文

stc89c52 lcd1602c语言滚动显示字符

02月19日 编辑 39baobao.com

/******************************************************************************************************* LCD1602液晶显示实验说明: 用杜邦线: 1.将P0口与LCD的D0-D7连接起来 2.将P2.0 接到 P2.1 P2.2 分别与RS WR E分别连接********************************************************/#include"AT89S52.H"#define uchar unsigned char#define uint unsigned int#define LCD_DATA P2 //定义LCD的D0-D7所在端口#define LCD_EN P1_4 #define LCD_RW P1_5 //LCD读写控制引脚#define LCD_RS P1_6 //LCD指令或数据选择引脚void nus_delay(uint nus);void nms_delay(uint nms);void mcu_io_init(void);void lcd_init(void);void LCD_en_write(void);void wait_LCD_Ready(void);void set_LCD_xy(uchar x, uchar y );void LCD_write_onechar(uchar COMM,uchar DAT);void LCD_write_string(uchar X,uchar Y,uchar *string);/****************************************************函数名称:main功能描636f707962616964757a686964616f31333339666163述:主函数输 入: 无输 出: 无*****************************************************/void main(void){ uchar START_DISPLAY1[]={"welcome to wtu"}; uchar START_DISPLAY2[]={" thank you "}; mcu_io_init(); lcd_init(); nms_delay

(10); while

(1) { LCD_write_string(1,0,START_DISPLAY1); nms_delay(100); LCD_write_string(1,1,START_DISPLAY2); nms_delay(1000); }}/****************************************************函数名称:mcu_io_init功能描述:上电CPU IO口初始化输 入: 无输 出: 无*****************************************************/void mcu_io_init(void){ LCD_DATA=0xff; LCD_EN=1; LCD_RW=1; LCD_RS=1;}/****************************************************函数名称:lcd_init功能描述:LCD初始化输 入: 无输 出: 无说明:注意初始化过程并加上适当延时 后面LCD的显示方式可按实际需要修改*****************************************************/void lcd_init(void){ nms_delay(15); LCD_write_onechar(0x38,0); nms_delay

(1); LCD_write_onechar(0x38,0); nms_delay

(1); LCD_write_onechar(0x38,0); nms_delay

(1); LCD_write_onechar(0x38,0); LCD_write_onechar(0x08,0); /*显示关闭*/ LCD_write_onechar(0x01,0); /*显示清屏*/ LCD_write_onechar(0x06,0); /*显示光标移动设置*/ nms_delay

(1);; LCD_write_onechar(0x0C,0); /*显示开及光标设置*/}/****************************************************函数名称:LCD_en_write功能描述:EN端产生一个脉冲,写LCD输 入: 无输 出: 无*****************************************************/void LCD_en_write(void) { LCD_EN=1; nus_delay(150); //E脉冲周期最小150ns LCD_EN=0;}/****************************************************函数名称:wait_LCD_Ready功能描述:判断LCD忙标志输 入: 无输 出: 无*****************************************************/void wait_LCD_Ready(void){ uchar temp1; LCD_DATA=0XFF; //判断LCD忙标志 //1为忙 0为空闲 LCD_RS=0; LCD_RW=1; //读 LCD_EN=1; nus_delay

(2); do { temp1=LCD_DATA; temp1&=0x80; }while(temp1); LCD_EN=0; LCD_RS=1;}/****************************************************函数名称:LCD_write_onechar功能描述:写一个字节到LCD输 入: COMM(指令) DAT(显示数据) 输 出: 无*****************************************************/void LCD_write_onechar(uchar COMM,uchar DAT){ wait_LCD_Ready(); //等待LCD空闲 LCD_RW=0; //写 //写数据 if(COMM==0) { LCD_RS=1; //RS高电平向LCD写数据 LCD_DATA=DAT; } //写命令 else { LCD_RS=0; LCD_DATA=COMM; } LCD_en_write(); nus_delay

(2); LCD_RW=1; LCD_RS=1;}/****************************************************函数名称:LCD_write_string功能描述:LCD字符串显示函数输 入: x/y(X与Y坐标) *string(字符串首地址)输 出: 无*****************************************************/void LCD_write_string(uchar X,uchar Y,uchar *string){ set_LCD_xy( X, Y ); //设置LCD显示坐标 while (*string) { LCD_write_onechar(0,*string ); string ++; //指向下一显示字符地址 }}/****************************************************函数名称:set_LCD_xy功能描述:设置显示坐标输 入: x/y(X与Y坐标)输 出: 无说明: LMB1602第一行首地址为0x80 第二行为0xC0*****************************************************/void set_LCD_xy(uchar x, uchar y ){ uchar DIS_address; if (y == 0) DIS_address = 0x80 + x; //第一行X列 else DIS_address = 0xc0 + x; LCD_write_onechar( DIS_address, 0 ); //第二行X列}/****************************************************函数名称:nus_delay功能描述:微秒级延时子程序输 入: 无输 出: 无说明: 晶振为11.0592M时 *****************************************************/void nus_delay(uint nus){ int j=10; while(nus--) { while(j--); j=10; }}/****************************************************函数名称:nms_delay功能描述:毫秒级延时子程序输 入: 无输 出: 无说明: 晶振为11.0592M时 *****...

推荐阅读
图文推荐