#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RS = P2^0; sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar code dis1[] = {" WLCOME TO "};uchar code dis2[] = {" WWW.RICHMCU.COM "};uchar code dis3[] = {" OT EMOCLW "};uchar code dis4[] = {" MOC.UCMHCIR.WWW "};/*******************************************************************//* *//* 延时子程序 *//* *//*******************************************************************/void delay(int ms){ int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}/*******************************************************************//* *//*检查LCD忙状态 *//*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*//* *//*******************************************************************/bit lcd_busy(){ bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; }/*******************************************************************//* *//*写指令数据到LCD *//*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *//* *//*******************************************************************/void lcd_wcmd(uchar cmd){ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; }/*******************************************************************//* *//*写显示数据到LCD *//*RS=H,RW=L,E=高脉冲,D0-D7=数据。 *//* *//*******************************************************************/void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; }/*******************************************************************//* *//* 设定显示位置 *//* *//*******************************************************************/void lcd_pos(uchar pos){ lcd_wcmd(pos|0x80); //数据指针=80+地址变量}/*******************************************************************//* *//* LCD初始化设定 *//* *//*******************************************************************/void lcd_init(){ lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); //显示开,关光标 delay(5); lcd_wcmd(0x06); //移动光标 delay(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay(5);}/*******************************************************************//* *//* 闪动子程序 *//* *//*******************************************************************/void flash(){ delay(600); //控制停留时间 lcd_wcmd(0x08); //关闭显示 delay(200); //延时 lcd_wcmd(0x0c); //开显示 delay(200); //延时 lcd_wcmd(0x08); //关闭显示 delay(200); //延时 lcd_wcmd(0x0c); //开显示 delay(200);}/*******************************************************************//* *//* 主程序 *//* *//*******************************************************************/main(){ uchar i; delay(10); lcd_init(); // 初始化LCD while(1) { lcd_wcmd(0x06); //向右移动光标 lcd_pos(0); //设置显示位置为第一行的第1个字符 i = 0; while(dis1[i] != ' ') { //显示字符" Welcome TO " lcd_wdat(dis1[i]); i++; delay(30); //控制两字之间显示速度 } lcd_pos(0x40); //设置显示位置为第二行第1个字符 i = 0; while(dis2[i] != ' ') { lcd_wdat(dis2[i]); //显示字符" WWW.RICHMCU.COM " i++; delay(30); //控制两字之间显示速度 } flash(); //闪动二次 lcd_wcmd(0x01); //清除LCD的显示内容 delay(200); //控制转换时间 lcd_wcmd(0x04); //向左移动光标 lcd_pos(15); //设置显示位置为第一行的第16个字符 i = 0; while(dis3[i] != ' ') { //显示字符" Welcome TO " lcd_wdat(dis3[i]); i++; delay(30); //控制两字之间显示速度 } lcd_pos(0x4F); //设置显示位置为第二行的第16个字符 i = 0; while(dis4[i] != ' ') { lcd_wdat(dis4[i]); //显示字符" WWW.RICHMCU.COM " i++; delay(30); //控制两字之间显示速度 } flash(); //闪动二次 lcd_wcmd(0x01); //清除LCD的显示内容 delay(200); //控制转换时间 }}
导读:目前正在解读《一个1602循环显示程序》的相关信息,《一个1602循环显示程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一个1602循环显示程序》的详细说明。
简介:这里给大家分享一个一个1602循环显示程序。
提醒:《一个1602循环显示程序》最后刷新时间 2024-03-14 01:02:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一个1602循环显示程序》该内容的真实性请自行鉴别。