完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
/********IO引脚定义***********************************************************/ ***it LCD_RS=P2^7;//定义引脚 ***it LCD_RW=P2^6; ***it LCD_E=P2^5; /********宏定义***********************************************************/ #define LCD_Data P0 #define Busy 0x80 //用于检测LCD状态字中的Busy标识 /********数据定义*************************************************************/ unsigned char code uctech[] = {"Happy every day"}; unsigned char code net[] = {"QQ:342965129"}; /********函数声明*************************************************************/ void WriteDataLCD(unsigned char WDLCD); //写数据 void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令 unsigned char ReadDataLCD(void); //读数据 unsigned char ReadStatusLCD(void); //读状态 void LCDInit(void); //初始化 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //相应坐标显示字节内容 void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //相应坐标开始显示一串内容 void Delay5Ms(void); //延时 void Delay400Ms(void); //延时 /********************************************************** 【函数功能】主函数 【实现功能】实现系统功能 **********************************************************/ void main(void) { Delay400Ms(); //启动等待,等LCD讲入工作状态 LCDInit(); //初始化 Delay5Ms(); //延时片刻(可不要) DisplayListChar(0, 0, uctech); DisplayListChar(1, 5, net); ReadDataLCD(); //测试用句无意义 while(1); } /********************************************************** 【函数功能】液晶1602的写数据函数 【函数入口】unsigned char WDLCD) 【函数出口】无 【实现功能】实现液晶1602的写数据 **********************************************************/ void WriteDataLCD(unsigned char WDLCD) { ReadStatusLCD(); //检测忙 LCD_Data = WDLCD; LCD_RS = 1; LCD_RW = 0; LCD_E = 0; //若晶振速度太高可以在这后加小的延时 LCD_E = 0; //延时 LCD_E = 1; } /********************************************************** 【函数功能】液晶1602的写指令函数 【函数入口】unsigned char WCLCD,BuysC 【函数出口】无 【实现功能】实现液晶1602的写指令 **********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测 { if (BuysC) ReadStatusLCD(); //根据需要检测忙 LCD_Data = WCLCD; LCD_RS = 0; LCD_RW = 0; LCD_E = 0; LCD_E = 0; LCD_E = 1; } /********************************************************** 【函数功能】读数据液晶1602函数 【函数入口】无 【函数出口】LCD_Data 【实现功能】实现液晶1602的数据功能 **********************************************************/ unsigned char ReadDataLCD(void) { LCD_RS = 1; LCD_RW = 1; LCD_E = 0; LCD_E = 0; LCD_E = 1; return(LCD_Data); } /********************************************************** 【函数功能】读液晶1602的状态函数 【函数入口】无 【函数出口】LCD_Data 【实现功能】实现液晶1602的状态读取 **********************************************************/ unsigned char ReadStatusLCD(void) { LCD_Data = 0xFF; LCD_RS = 0; LCD_RW = 1; LCD_E = 0; LCD_E = 0; LCD_E = 1; while (LCD_Data & Busy); //检测忙信号 return(LCD_Data); } /********************************************************** 【函数功能】液晶1602初始化函数 【函数入口】无 【函数出口】无 【实现功能】实现液晶1602初始化 **********************************************************/ void LCDInit(void) { LCD_Data = 0; WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCD(0x38,0); Delay5Ms(); WriteCommandLCD(0x38,0); Delay5Ms(); WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCD(0x08,1); //关闭显示 WriteCommandLCD(0x01,1); //显示清屏 WriteCommandLCD(0x06,1); //显示光标移动设置 WriteCommandLCD(0x0C,1); //显示开及光标设置 } /********************************************************** 【函数功能】按指定位置显示一个字符 【函数入口】unsigned char X, unsigned char Y, unsigned char DData 【函数出口】无 【实现功能】实现指定位置显示一个字符 **********************************************************/ void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; //算出指令码 WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码 WriteDataLCD(DData); } /********************************************************** 【函数功能】按指定位置显示一串字符 【函数入口】unsigned char X, unsigned char Y, unsigned char code *DData 【函数出口】无 【实现功能】实现指定位置显示一串字符 **********************************************************/ void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20){ //若到达字串尾则退出 if (X <= 0xF){ //X坐标应小于0xF DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; X++; } } } /********************************************************** 【函数功能】延时函数 【函数入口】无 【函数出口】无 【实现功能】软件延时5个毫秒 **********************************************************/ void Delay5Ms(void) { unsigned int TempCyc = 5552; while(TempCyc--); } /********************************************************** 【函数功能】延时函数 【函数入口】无 【函数出口】无 【实现功能】软件延时400个毫秒 **********************************************************/ void Delay400Ms(void) { unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--){ TempCycB=7269; while(TempCycB--); } }
|
|
相关推荐
8个回答
|
|
调一下可调电阻
|
|
|
|
看LCD屏的显示情况应该需要调一下可调电阻的阻值。
|
|
|
|
|
|
|
|
|
|
|
|
看程序总是有种***茬的感觉。我有现成的驱动程序,程序没用判忙语句。你是要程序,还是要指出错误之处。
|
|
|
|
那还是程序吧 |
|
|
|
#include
char code fine1[16]={""}; char code fine2[16]={""}; ***it rs=P2^6; ***it rw=P2^5; ***it ep=P2^7; void delay(int z) { int x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } bit ifinbusy() { bit a; rs=0; rw=1; delay(3); ep=1; a=(bit)(P0&0x80); ep=0; return a; } void wml(char min) { rs=0; rw=0; delay(3); ep=1; P0=min; ep=0; } void wsj(char dat) { rs=1; rw=0; delay(3); ep=1; P0=dat; ep=0; } void start() { while(ifinbusy()); wml(0x38); delay(3); wml(0x80); delay(3); wml(0x0c); delay(3); wml(0x06); delay(3); wml(0x18); delay(3); } void main() { int k; start(); for(k=0;k<16;k++) { wsj(fine1[k]); delay(3); } while(ifinbusy()); wml(0x80+0x40); for(k=0;k<16;k++) { wsj(fine2[k]); delay(3); } //for(k=0;k<1;k++) //{ //wml(0x18); //delay(200); //} } 试一下这个程序吧,显示内容增加加上去看看 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12026 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:07 , Processed in 0.604233 second(s), Total 55, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号