用89C52单片机驱动1602液晶,怎么才能瞬间显示一行字母?(用汇编和用C,有区别吗)
别人做好的1602驱动程序,是瞬间显示一行(16个字母)而我做的程序是逐字显示。知道是什么原因吗?最好能说下原因...
别人做好的1602驱动程序,是瞬间显示一行(16个字母)
而我做的程序是逐字显示。知道是什么原因吗?
最好能说下原因 展开
而我做的程序是逐字显示。知道是什么原因吗?
最好能说下原因 展开
6个回答
展开全部
啥叫瞬间显示啊?
如果是闪一下,可以先显示再擦除。(不过有啥用呢?测试相机?)
如果问题是不知道如何显示,方法一般是:先使能;再进行模块初始化;再写控制字;再写数据;写操作不要忘记判忙(busy=1)。
汇编与c对于但片机没有任何区别,对于使用者,比如你,也不应该有本质的区别。好的工程师是应该知道一条c语句编译出什么样的汇编语句的,所以他们在写c语句的时候是在选择更高效率的语句和结构。
如果是闪一下,可以先显示再擦除。(不过有啥用呢?测试相机?)
如果问题是不知道如何显示,方法一般是:先使能;再进行模块初始化;再写控制字;再写数据;写操作不要忘记判忙(busy=1)。
汇编与c对于但片机没有任何区别,对于使用者,比如你,也不应该有本质的区别。好的工程师是应该知道一条c语句编译出什么样的汇编语句的,所以他们在写c语句的时候是在选择更高效率的语句和结构。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg51.h>
#include <intrins.h>
typedef unsigned char BYTE;
typedef bit BOOL;
sbit LCD_RS = P2^5;
sbit LCD_RW = P2^6;
sbit LCD_EP = P2^7;
char num;
unsigned char code table[]="I Love Yuo";
unsigned char code table1[]="Do You Love Me?";
/*延时程序*/
void delay2(unsigned char i)
{while(--i);}
void delay8(unsigned int t)
{while(--t);}
void delay_50ms(unsigned int i)
{
int j;
while(--i)
for(j=6245;j>0;j--)
{;}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
delay2(2);
result = (BOOL)(P0 & 0x80);
LCD_EP = 0;
return (result);
}
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
P0 = cmd;
//delay2(2);
LCD_EP=1;
delay2(4);
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 = dat;
LCD_EP=1;
delay2(4);
LCD_EP=0;
}
lcd_init()
{
delay8(1900); //LCD初始化设定
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay8(625);
lcd_wcmd(0x0c); //显示开,关光标
delay8(625);
lcd_wcmd(0x06); //移动光标
delay8(625);
lcd_wcmd(0x01); //清除LCD的显示内容
delay8(625);
}
/*main()
{
delay8(1900);
lcd_init();
lcd_wdat(tab[1]);
delay8(1000);
{
while(1);
}
} */
void main()
{
lcd_init();
for(num=0;num<11;num++)
{
lcd_wdat(table[num]);
delay_50ms(10);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<16;num++)
{
lcd_wdat(table1[num]);
delay_50ms(10);
}
delay_50ms(10);
}
#include <intrins.h>
typedef unsigned char BYTE;
typedef bit BOOL;
sbit LCD_RS = P2^5;
sbit LCD_RW = P2^6;
sbit LCD_EP = P2^7;
char num;
unsigned char code table[]="I Love Yuo";
unsigned char code table1[]="Do You Love Me?";
/*延时程序*/
void delay2(unsigned char i)
{while(--i);}
void delay8(unsigned int t)
{while(--t);}
void delay_50ms(unsigned int i)
{
int j;
while(--i)
for(j=6245;j>0;j--)
{;}
}
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EP = 1;
delay2(2);
result = (BOOL)(P0 & 0x80);
LCD_EP = 0;
return (result);
}
lcd_wcmd(BYTE cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
P0 = cmd;
//delay2(2);
LCD_EP=1;
delay2(4);
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 = dat;
LCD_EP=1;
delay2(4);
LCD_EP=0;
}
lcd_init()
{
delay8(1900); //LCD初始化设定
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay8(625);
lcd_wcmd(0x0c); //显示开,关光标
delay8(625);
lcd_wcmd(0x06); //移动光标
delay8(625);
lcd_wcmd(0x01); //清除LCD的显示内容
delay8(625);
}
/*main()
{
delay8(1900);
lcd_init();
lcd_wdat(tab[1]);
delay8(1000);
{
while(1);
}
} */
void main()
{
lcd_init();
for(num=0;num<11;num++)
{
lcd_wdat(table[num]);
delay_50ms(10);
}
lcd_wcmd(0x80+0x40);
for(num=0;num<16;num++)
{
lcd_wdat(table1[num]);
delay_50ms(10);
}
delay_50ms(10);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用C很方便 逐字和一起都可以!!!有需要可以给个程序给你参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在你的延时程序上吧
将显示每个字符后的延时时间缩短,试试吧
将显示每个字符后的延时时间缩短,试试吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把QQ告诉我,Q上谈
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询