51单片机c语言 液晶显示1602怎么显示一个动态的数据?
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。
写一个函数把整型数据每位提取出来,就可以显示每位数据了。
void display_tem(x,y,int getdata) //getdata就是你采集来的数据吧~~
{
display_char(x,y,getdata/10);//我不知道你的温度是几位的整数~ 这里我
//假设是两位
//display_char用你自己的字符显示函数替代
display_char(x+1,y,getdata%10);
}
51单片机C语言1602液晶显示程序解析
这个是1602内部结构决定的,你只需要在初始化的时候先设置三次显示,然后再设置你的其他要求。
芯片厂家推荐的用法:
INT:
MOV
A,#30H
MOV
DATR,#CW_ADD
MOV
R2,#03H
INT1:
MOVX
@DPTR,A
CALL
DELAY
DJNZ
R2,INT1
这上面就是1602对于51单片机推荐的初始化之前加的三次模式设置
lcd1602的C语言编程 p++和*p的意思是?
你好:
lcd1602的响应速度相对于单片机的速度来说是偏慢的。
举个简单的例子,把一桶油通过漏斗向一个瓶子里倒,倒油的速度,即流量必须维持在一定范围之内,倒得太快油会从漏斗顶部溢出来,这样就浪费掉了。我们通过眼睛可以判断并使油面保持在顶面以下,以漏斗的额定流量来倒油,这样效率最高。
而对于单片机来说,1602好比那个瓶子漏斗,写入1602中要显示的数据好比油,如果以单片机的高运行速度向1602写数据就很可能造成上面所说的溢出,比如连续写入abc,结果只显示出了a,这是因为1602的显示芯片每次都要花时间来处理输入的ascii码数据,并把它显示出来。而我们却不容易主动地去控制写入数据的速度,所以1602使用忙信号就有必要了,每次单片机只有检测到忙信号为0,即不忙时,才向1602发数据。比如要显示abc,则这样操作,写a—判忙—写b—判忙—写c—判忙。这样就不会出错了。
这几年推出的lcd,像手机的屏响应速度就比较快,而1602这个古董我用示波器测过,大约40us左右的忙处理时间,而很多速度快的单片机的指令周期都是ns级的。也就是说单片机相当一段时间都在‘等’lcd。#include
#defineucharunsignedchar
#defineuintunsignedint
voidbusy(void)
{uchartemp=0x80;//初始化temp最高位为1,使得能够进入下面
//的while循环
p0=0xff;(p0就是8个数据口)
rs=0;//设置命令操作
rw=1;//设置读操作
en=1;//使能
delay(100);(这是设的延时函数,不用解释)
while(temp0x80)//判忙,一旦表达式为假,即temp最高位为0,
//则表示1602不忙,跳出while.
{temp=p0;delay(20);}//把p0的的高位读入temp,延时
en=0;//关闭使能信号
}每次读写操作都要调用这个busy函数
用于1602液晶屏的C语言程序
这是为你量身制作的,希望你能喜欢,光标根据按键在数字下面闪烁,一定符合你的要求,给你截了一张效果图
#includereg52.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code table[]=”1602″;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
void delay(uint z)
{
uint x,y;
for(x=z;x0;x–)
for(y=110;y0;y–);
}
void write_com(uchar com)
{
rs=0;
rw=0;
en=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_dat(uchar dat)
{
rs=1;
rw=0;
en=0;
P0=dat;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
uchar i;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x86);
for(i=0;i4;i++)
{
write_dat(table[i]);
delay(5);
}
}
void main()
{
init();
while(1)
{
if(key1==0)
{
delay(10);
if(key1==0)
{
while(key1==0);
write_com(0x86);
write_com(0x0f);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
while(key2==0);
write_com(0x87);
write_com(0x0f);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
while(key3==0);
write_com(0x88);
write_com(0x0f);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
while(key4==0);
write_com(0x89);
write_com(0x0f);
}
}
}
}
用C语言来编写用1602来显示的计数器
你说的我就能帮你搞个加减乘除运算了。
以下是代码。
#includestdio.h
main()
{
int i=1,flag=0; float a,b,c; char v;
printf(“输入数字完成运算”);
scanf(“%f%c%f”,a,v,b);
while(v!=’#’)
{ switch(v)
{ case ‘+’:c=a+b;break;
case ‘-‘:c=a-b;break;
case ‘*’:c=a*b;break;
case ‘/’:
if(b==0) flag=1;
else c=a/b; break;
default: flag=2;
}
if(flag==0)
{
printf(“%f%c%f=%f\n”,a,v,b,c);
i++;
}
if(flag==1) printf(“shucuole”);
if(flag==2) printf(“zifucuole”);
printf(“jixushuchu”);
scanf(“%f%c%f”,a,v,b);
}
}
我是个新手。
但可以保证代码的正确
单片机 1602 液晶屏 检测是否忙对的c程序,看不懂,望详解
void busy_test()//检测lcd是否忙
{
u8 st; //忙状态标志 0:不忙,0x80:忙
if(f_init==0) //如果某个东西没有初始化
{
return; // 退出忙判断,不执行下面的代码
}
lcd=0xff; // 先往数据端口赋高电平,便于读数据
rs=0; // 读忙设置
rw=1;//读
do
{
e=1; // 数据端口读写使能
st=lcd; // 读数据端口的值
e=0; // 禁止数据端口读写
}
while(st0x80); // 如果忙位BF为1,就一直读端口数据,直到为0才退出忙判断。
// BF:忙标志位,为数据端口的BIT7位。所以为0x80
}