完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
|
|
/******************************************************************************** * 描述: LCD1602 滚动显示 * * 显示方式: * * 1、从左到右逐字显示,闪动二次,清屏。 * * 2、再从右到左逐字显示,闪动二次,清屏。 * * 3、周期性地重复上述显示方式。 * ********************************************************************************/ #include #include typedef unsigned char BYTE; //用BYTE代替unsigned char typedef bit BOOL; // 用BOOL代替bit ***it LCD_RS = P2^6; //复位端 ***it LCD_RW = P2^5; //写数据端 ***it LCD_EP = P2^7; //使能端 BYTE code dis1[] = {" WELCOME TO "}; BYTE code dis2[] = {" WWW.PRECHIN.COM "}; BYTE code dis3[] = {" OT EMOCLEW "}; BYTE code dis4[] = {" MOC.NIHCERP.WWW "}; /****************延时函数************************/ delay(int ms) { //延时子程序 int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); //空执行 _nop_(); _nop_(); _nop_(); } } } /****************侧忙函数************************/ BOOL lcd_bz() { BOOL result; LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1 LCD_EP = 0; return result;//返回侧忙结果 } /****************写命令函数************************/ lcd_wcmd(BYTE cmd) { // 写入指令数据到LCD while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_();  0 = cmd; //将8位指令通过P0口传给1602 _nop_(); _nop_(); //用于产生一个脉冲宽度 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; } lcd_pos(BYTE pos) { //设定显示位置 lcd_wcmd(pos | 0x80); } /****************写数据函数************************/ lcd_wdat(BYTE dat) { //写入字符显示数据到LCD while(lcd_bz()); LCD_RS = 1; LCD_RW = 0; LCD_EP = 0;  0 = dat; //将8位数据通过P0口传给1602 _nop_(); _nop_(); //用于产生一个脉冲宽度 _nop_(); _nop_(); LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP = 0; } lcd_init() { //LCD初始化设定 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(1); lcd_wcmd(0x0c); //显示开,关光标 delay(1); lcd_wcmd(0x06); //移动光标 delay(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); } /****************主函数************************/ main() { BYTE i; lcd_init();// 初始化LCD delay(10); while(1) { lcd_wcmd(0x06);//向右移动光标 lcd_pos(0);//设置显示位置为第一行的第1个字符 i = 0; while(dis1[ i ] != ' |