51lcd1602与单片机连接图编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号

已解决问题
51单片机液晶1602的C程序谁有,给个简单的显示一个字符A的
提问时间: 13:19:45
浏览次数:7420
该答案已经被保护
先定义一下LCD的使能端口一些设置 例如: sbit LCD_RS = P2^6; //复位端 sbit LCD_RW = P2^5; //写数据端 sbit LCD_EP = P2^7; //使能端 添加读写以及初始化LCD的代码 /****************侧忙函数************************/ BOOL lcd_bz() { BOOL LCD_RS = 0; LCD_RW = 1; LCD_EP = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1 LCD_EP = 0;//返回侧忙结果 } /****************写命令函数************************/ lcd_wcmd(BYTE cmd) { // 写入指令数据到LCD while(lcd_bz()); LCD_RS = 0; LCD_RW = 0; LCD_EP = 0; _nop_(); _nop_(); P0 = //将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; P0 = //将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函数中添加初始化LCD的函数 例如 void main(void) { BYTE lcd_init();// 初始化LCD delay(10); while(1) { lcd_wcmd(0x06);//向右移动光标 lcd_pos(0);//设置显示位置为第一行的第1个字符 i = 0; tt.XX.number = ??; //这边问好表示你需要显示的数据,这样你应该明白怎么做了 //将你的数据赋值给number即可,然后让他显示dis的数据 while(tt.dis1[ i ] != '\0') { lcd_wdat(dis1[ i ]); i++; delay(30);//控制两字之间显示速度 } delay(500);//控制两字之间显示速度 lcd_wcmd(0x01);//清除LCD的显示内容 } } //程序的定义头文件下写这个,主要是省去数据转换这一环节,让自己代码更加快速转换 typedef union { unsigned char dis1[4]; struct { }XX; }TT; idata TT 不懂可继续追问,懒得去看你之前写的那些,就给你提供一下方法。
答案创立者
以企业身份回答&
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题查看: 9968|回复: 10
求1602LCD实现动态数据显示,具有走数功能(c语言)
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
求 1602LCD实现动态数据显示,具有走数功能
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1649, 距离下一级还需 1351 积分
在线时间57 小时
19:58 上传
点击文件名下载附件
9.76 KB, 下载次数: 1969
坚持学习!就能成功!
主题帖子精华
金牌会员, 积分 1649, 距离下一级还需 1351 积分
在线时间57 小时
/********************************************************************************
*& 描述:&&&&&&&&&&&&&&& LCD1602 滚动显示&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *
* 显示方式:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *
* 1、从左到右逐字显示,闪动二次,清屏。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *
* 2、再从右到左逐字显示,闪动二次,清屏。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *
* 3、周期性地重复上述显示方式。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *&&&&&&&&&&&&&&&&&&&&&&&&&&&
********************************************************************************/
&#include &reg51.h&&//51寄存器文件
&#include &intrins.h&
&typedef unsigned char BYTE;&//用BYTE代替unsigned char
&typedef bit BOOL;& // 用BOOL代替bit
&sbit LCD_RS = P2^6;& //复位端&&&&&&&&&&&
&sbit LCD_RW = P2^5;& //写数据端
&sbit LCD_EP = P2^7;& //使能端
&BYTE code dis1[] = {"&& WELCOME& TO&& "};
&BYTE code dis2[] = {"
&BYTE code dis3[] = {"&& OT& EMOCLEW&& "};
&BYTE code dis4[] = {" MOC.NIHCERP.WWW "};
/****************延时函数************************/&
&delay(int ms)
&{&&&&&&&&&&&&&&&&&&& //延时子程序
&while(ms--)
&& for(i = 0; i& 250; i++)
&&& _nop_();&& //空执行
&&& _nop_();
&&& _nop_();
&&& _nop_();
/****************侧忙函数************************/&&
&BOOL lcd_bz()
&{&&&&&&&&&&&&&&&&&&&&&&&&
&LCD_RS = 0;
&LCD_RW = 1;
&LCD_EP = 1;
&result = (BOOL)(P0 & 0x80);& //检测P0最高位是否为1
&LCD_EP = 0;
&//返回侧忙结果
/****************写命令函数************************/&
&lcd_wcmd(BYTE cmd)
&{&&&&&&&&&&&&&&&&&&&&&&&&& // 写入指令数据到LCD
&while(lcd_bz());
&LCD_RS = 0;
&LCD_RW = 0;
&LCD_EP = 0;
&nbsp0 = //将8位指令通过P0口传给1602
&_nop_(); //用于产生一个脉冲宽度
&LCD_EP = 1;
&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;
&nbsp0 =& //将8位数据通过P0口传给1602
&_nop_();&& //用于产生一个脉冲宽度
&LCD_EP = 1;
&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);
/****************主函数************************/&
&&&& lcd_init();// 初始化LCD
&&&& delay(10);
&&&& while(1)&&&&&&&&&&&&&
&&&&&& lcd_wcmd(0x06);//向右移动光标
&&&&&& lcd_pos(0);//设置显示位置为第一行的第1个字符
&&&&&& i = 0;
&&&&& while(dis1[ i ] != '\0')
&&&&& {&& //显示字符"WLCOME& TO"
&&&&&&& lcd_wdat(dis1[ i ]);
&&&&&&& i++;
&&&&&&& delay(30);//控制两字之间显示速度
&&&&&& lcd_pos(0x40);//设置显示位置为第二行第1个字符
&&&&&& i = 0;
&&&&& while(dis2[ i ] != '\0')
&&&&&&& lcd_wdat(dis2[ i ]);//显示字符" & "
&&&&&&& i++;
&&&&&&& delay(30);//控制两字之间显示速度
&&&&&& delay(800);//控制停留时间
&&&&&& lcd_wcmd(0x01);//清除LCD的显示内容
&&&&&& delay(1);
&&&&&& lcd_wcmd(0x04);//向左移动光标
&&&&&& lcd_pos(15);//设置显示位置为第一行的第16个字符
&&&&&& i = 0;
&&&&& while(dis3[ i ] != '\0')
&&&&& {&&&&&&&&&&&&&&&& //显示字符"WLCOME& TO"
&&&&&&& lcd_wdat(dis3[ i ]);
&&&&&&& i++;
&&&&&&& delay(30);&&&&&&&&& //控制两字之间显示速度
&&&&&& lcd_pos(0x4F);&&&&& //设置显示位置为第二行的第16个字符
&&&&&& i = 0;
&&&&& while(dis4[ i ] != '\0')
&&&&&&& lcd_wdat(dis4[ i ]);& //显示字符" & "
&&&&&&& i++;
&&&&&&& delay(30);&&&&&& //控制两字之间显示速度
&&&&&& delay(800);&&&&&& //控制停留时间
&&&&&& lcd_wcmd(0x01);&& //清除LCD的显示内容
&&&&&& delay(200);&&&&&& //控制两屏转换时间
&&&&&&&&&&
坚持学习!就能成功!
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
谢谢!非常感谢!
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
下载进去后,1602没有任何显示!
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1649, 距离下一级还需 1351 积分
在线时间57 小时

注意IO口
坚持学习!就能成功!
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
哦,头晕了!谢谢!我试一试!
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
成功了!不过我是想要数字秒表类的,走数。
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
液晶计数器.rar&(文件大小:&10&KB&下载次数:2次)&,下载后没有.c源文件,.hex文件打开之后什么也没有。
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
我觉得这个程序比较简单简短
#include&&reg52.h&
#include&&intrins.h&&
typedef&unsigned&char&uint8;
sbit&RS&=&nbsp1^0&;
sbit&RW&=&nbsp1^1&;
sbit&EN&=&nbsp1^5&;
sbit&BUSY&=&nbsp0^7;
unsigned&char&code&word1[]={"Welcome&to"};&&&&&
unsigned&char&code&word2[]={"wuhan"};
/**
&*&等待繁忙标志,检测状态字stat7位是否繁忙?
*/
void&wait(void)&&//读命令函数,检测液晶硬件状态就是读取硬件状态,是命令函数。D7位=0时才可以往液晶写数据。
{
P0&=&0xFF;
do&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RS&=&0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
}while&(BUSY&==&1);&//当busy==1时,就不断执行do大括号的内容语句,直到busy即P0.7=0为止。
EN&=&0;&&&&&&&&&&&&&&//do大括号的内容语句:是1602“读状态”时序模式输入,输出的是D0-D7状态字。
}&&&&&&&&&&&&&&&&&&&&&&&&&&//执行完本句,P0口的每一位就反应出通过本程序读出的液晶当前状态。
/**
&*&写数据
*/
void&w_dat(uint8&dat)
{
/**
&*&写命令
*/
void&w_cmd(uint8&cmd)
{
/**
&*&发送字符串到LCD
*/
void&w_string(uint8&addr_start,&uint8&*p)
{
w_cmd(addr_start);&&//addr_start就是地址
while&(*p&!=&'\0')
w_dat(*p++);&&//即把指针变量p所指向的内容(数组字符)按顺序逐个写到P0口!
/**
&*&初始化1602
*/
void&Init_LCD1602(void)
{
w_cmd(0x38);&&//&16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C);&&//&显示器开、光标开、光标允许闪烁
w_cmd(0x06);&&//&文字不动,光标自动右移。此处只能是0x06!
w_cmd(0x01);&&//&清屏
}
Init_LCD1602();
w_string(0x80,word1);&//把world1数组内容写到1602第一行,从第一位开始
w_string(0xC0,word2);&&//把world2数组内容写到1602第二行地址起始位0xc0.即(0x80+0x40)=0xc0。
while&(1);
}
手艺人要内外兼修。
主题帖子精华
金牌会员, 积分 1814, 距离下一级还需 1186 积分
在线时间61 小时
请发一个走数(动态显示数字)的.c&&&&&&&&谢谢!
手艺人要内外兼修。
必看:"原子哥”极力推荐 /1
资料包括正点原子开发板全套视频,源码,手册等。原子粉丝请关注公众号。
Powered by51单片机1602怎么显示一行字符,c语言的_百度知道
51单片机1602怎么显示一行字符,c语言的
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
zhxiufan知道合伙人
IT类认证行家
知道合伙人
采纳数:14322
获赞数:19990
国家科技进步奖
#define&LCD1602_FLAG#define&LCD1602_PORT&P0#include&reg51.h&#include&stddef.h&#define&uchar&unsigned&charsbit&lcd1602_rs=P2^0;sbit&lcd1602_e=P2^2;sbit&lcd1602_rw=P2^1;sbit&lcd1602_busy=P0^7;uchar&str[]=&This&is&Key&Test&;uchar&keyval,keystr[16];void&delay(uchar&a){uchar&i;while(a--)for(i=0;i&120;i++);}/*************************************&*&函数名称:lcd1602_CheckBusy()&*&函数功能:状态查询*************************************/void&lcd1602_CheckBusy(){&&&&do &&&&{ &&&&lcd1602_busy=1; &&&&lcd1602_rs=0; &&&&lcd1602_rw=1; &&&&lcd1602_e=0; &&&&lcd1602_e=1; &&&&} while(lcd1602_busy);}/****************************************&*&函数名称:&lcd1602_WriteCmd()&*&函数功能:写命令&*&入口参数:命令字&*&出口参数:无****************************************/void&lcd1602_WriteCmd(const&uchar&cmd){&&&&lcd1602_CheckBusy(); lcd1602_rs=0; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT= lcd1602_e=0;}/********************************************&*&函数名称:lcd1602_WriteData()&*&函数功能:写数据&*&入口参数:c--待写数据&*&出口参数:无**********************************************/void&lcd1602_WriteData(const&uchar&c){&&&&lcd1602_CheckBusy(); lcd1602_rs=1; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT=c; lcd1602_e=0;}/************************************************&*&函数名称:lcd1602_Init()&*&函数功能:初始化LCD&*&入口参数:无&*&出口参数:无************************************************/void&lcd1602_Init(){&&&&lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵&&&&lcd1602_WriteCmd(0x0c);&//display&enable,flag&enable,flash&enable,&&&&lcd1602_WriteCmd(0x06);&//flag&move&to&right,screen&don't&move&&&&lcd1602_WriteCmd(0x01);&//clear&screen}/*************************************************&*&函数名称:lcd1602_Display()&*&函数功能:&字符显示&*&入口参数:ptr--字符或字符串指针&*&出口参数:无&*&说&&&&明:用户可通过以下方式来调用:&*&&&&&&&&&&&1)lcd1602_Display(&Hello,world!&);&*&&&&&&&&&&&2)&INT8U&存储类型&txt[]=&要显示的字符串&;&*&&&&&&&&&&&&&&或者&INT8U&存储类型&txt[]={'t','x','t',..,'\0'};&*&&&&&&&&&&&&&&INT8U&*&*&&&&&&&&&&&&&&ptr=&&*&&&&&&&&&&&&&&lcd1602_Display(ptr);&*&&&&&&&&&&&&&&或&lcd1602_Display(txt);&*&&&&&&&&&&&&&&或&lcd1602_Display(&txt);*************************************************/void&lcd1602_Display(const&uchar&*ptr,uchar&line){&&&&uchar&data&i=0; uchar&*data&q; q=
switch(line)
lcd1602_WriteCmd(0x80);
while(q!=NULL&&&&(*q!='\0')&&&&i&16) &&&& {
lcd1602_WriteData(*q);
i++; &&&& }
lcd1602_WriteCmd(0xc0);
while(q!=NULL&&&&(*q!='\0')&&&&i&16) &&&& {
lcd1602_WriteData(*q);
}}uchar&kbscan(void){ unsigned&char&sccode, P3=0x0f;&&//发0扫描,列线输入 if&((P3&&&0x0f)&!=&0x0f)&&//有键按下 {
delay(20);&&&//延时去抖动
if&((P3&0x0f)!=&0x0f)
sccode&=&0&&&&//逐行扫描初值
while((sccode&0x01)!=0)
if((P3&0x0f)!=0x0f)
&&&&recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
&&&&&&&&else
sccode=(sccode&&1)|0x01;
} } return&0;&&//无键按下,返回0}uchar&getkey(void){ uchar& key=kbscan(); if(key==0){keyval=0return(0);}
switch(key)
case&0x11:keyval=7;
case&0x12:keyval=4;
case&0x14:keyval=1;
case&0x18:keyval=10;
case&0x21:keyval=8;
case&0x22:keyval=5;
case&0x24:keyval=2;
case&0x28:keyval=0;
case&0x41:keyval=9;
case&0x42:keyval=6;
case&0x44:keyval=3;
case&0x48:keyval=11;
case&0x81:keyval=12;
case&0x82:keyval=13;
case&0x84:keyval=14;
case&0x88:keyval=15;
default:keyval=0
if(keyval!=0xff)return(1);
else&return(0);}main(){uchar&lcd1602_Init();lcd1602_Display(str,0);while(1) { if(getkey())
keystr[num]=keyval+0x30;
lcd1602_Display(keystr,1);
angehan知道合伙人
采纳数:30
获赞数:59
void LcdPrintfString( uchar *p, uchar posy, uchar posx ){
if ( posy==1 ) {
LcdWriteCom(0x80+posx); } else {
LcdWriteCom(0x80+0x40+posx); } for(k = 0;*(p+k) != '\0';k++)
LcdWriteData(*(p+k));}个人现在用的。。Y用来确定是第一行还是第二行显示,x是显示第一个字符的地址,其他的函数应该都看的出来是什么意思吧。。
本回答被提问者采纳
未王艮知道合伙人
采纳数:193
获赞数:856
void InitLcd(){ DelayMs(15); WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x38); //display mode WriteCommand(0x06); //显示光标移动位置 WriteCommand(0x0c); //显示开及光标设置 WriteCommand(0x01); //显示清屏 }/******************************************************************//*
写地址函数
*//******************************************************************/void LCD_set_xy( unsigned char x, unsigned char y )
if (y == 0) address = 0x80 +
address = 0xc0 +
WriteCommand( address);}/******************************************************************//*
写入字符串函数
*//******************************************************************/void ShowString (unsigned char x,unsigned char y,unsigned char *s){
LCD_set_xy(x,y);
while (*s)
// 写显示字符
WriteData( *s );
}这是从已经写好的1602液晶驱动程序拷贝过来的,喜欢玩单片机,C++的加我qq
我也是初学者,大家一起学习
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。51单片机芯片是stc89c52rc,LCD1602显示屏,怎样显示两行字符,然后滚动播放。原始C语言程序如下。有急用!!! - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机芯片是stc89c52rc,LCD1602显示屏,怎样显示两行字符,然后滚动播放。原始C语言程序如下。有急用!!!
<div class=""
/********************************************************
***********************************************& && &
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
功能描述:主函数
输 入: 无
输 出: 无
*****************************************************/
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=0
& & & & 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_
& & if (y == 0)
& & & && & DIS_address = 0x80 +& && && && &//第一行X列
& && & DIS_address = 0xc0 +
& & 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时& && && && &
*****************************************************/
void nms_delay(uint nms)
& & & & while(nms--)
& & & & nus_delay(300);
已退回1积分
23:04:02  
该类别下有 43 个回答。
该类别下有 35 个回答。
该类别下有 27 个回答。
该类别下有 24 个回答。
该类别下有 23 个回答。
该类别下有 23 个回答,其中被选为最佳答案 1 次。
该类别下有 21 个回答。
该类别下有 21 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 18 个回答。
该类别下有 18 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
滚动字符你就操作坐标就行了啊,你把整个字符串的坐标逐步增加或者减小就是了
这个可以对1602进行配置的吧,滚动显示模式,我记得是有的,你看看。
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 单片机lcd1602程序 的文章

 

随机推荐