
程序只是没有逻辑错误和语法错误,但液晶的控制貌似有些问题。给你一段1602的驱动程序做参考。
#define LCD1602_FLAG
#define LCD1602_PORT P1
#include<reg52h>
#include<stddefh>
#include"dtypeh"
sbit lcd1602_rs=P3^7;
sbit lcd1602_e=P3^5;
sbit lcd1602_rw=P3^6;
sbit lcd1602_busy=P1^7;
/
函数名称: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 INT8U cmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}
/
函数名称:lcd1602_WriteData()
函数功能:写数据
入口参数:c--待写数据
出口参数:无
/
void lcd1602_WriteData(const INT8U 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行57点阵
lcd1602_WriteCmd(0x0f); //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;
ptr=&txt;
lcd1602_Display(ptr);
或 lcd1602_Display(txt);
或 lcd1602_Display(&txt);
/
void lcd1602_Display(const INT8U ptr)
{
INT8U data i=0;
INT8U data q;
q=ptr;
lcd1602_WriteCmd(0x80);
while(q!=NULL && (q!='\0') && i<16)
{
lcd1602_WriteData(q);
q++;
i++;
}
lcd1602_WriteCmd(0xc0);
while(q!=NULL && (q!='\0') && i>=16 && i<32)
{
lcd1602_WriteData(q);
q++;
i++;
}
}
需要将LCD接口编程成数码管接口,并使用相应的编程语言来实现。
一般可以把LCD接口上的引脚连接到对应的数码管接口上的引脚,并且实现相应的控制命令来控制数码管显示内容。
1602液晶的程序我有,要做数字锁的话其实用到液晶也不多。
因为你显示密码是时候不应该都是现实吗?
你只需把键盘写入的数据存在一个数组中,然后跟密码数组对比就好了。
还有就是值得注意的是数据类型问题。
输入的键值看你处理的方式而定,密码存放的格式,还有输出显示的是ascll码。注意转换。
下面附带一段51的1602LCD的C程序,自己仔细琢磨。
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar table[16]="abcdefghijklmnyz";
uchar table1[16]="0123456789abcdef";
sbit lcden=P2^0;
sbit lcdrs=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ wela=0;
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{ wela=0;
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
init();
for(num=0;num<16;num++)
{
write_data(table[num]);
delay(20);
}
write_com(1);
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay(20);
}
while(1);
}
用单片机让LCD显示,一要保证电路正确,二是程序必须与电路相符,程序中的LCD的控制脚必须与实物相符。否则,液晶屏只亮并不显示字符。你主程序中的液晶屏初始化语句应放在第一行。你现在是放在最后了,假如前面语句显示了,可初始化后就全没了。
以上就是关于做一个单片机液晶显示数字的程序,程序没错,但是就是屏幕就是没有显示,麻烦大佬们看一看全部的内容,包括:做一个单片机液晶显示数字的程序,程序没错,但是就是屏幕就是没有显示,麻烦大佬们看一看、单片机把lcd改成数码管代码、1602液晶显示屏显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)