专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
求大神帮忙写一个用LCD1602液晶的程序
2019-07-16 00:05
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
9078
3
1235
帮忙写一个 0-9 A-F 和自定义字符的 显像程序被。。。小弟在这里感谢了。。。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
xunfeng0862
2019-07-16 05:37
希望对你有帮助
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs = P2^5;
sbit rw = P2^6;
sbit en = P2^7;
#define LCD P0
uchar s, m, h; //秒, 分, 时
uint a;
uchar code table[] = "I am dean";
uchar code my_table[] = { //自定义字符码
0x00,0x00,0x00,0x10,0x10,0x00,0x10,0x10, //:
0x04,0x0f,0x1f,0x0a,0x1f,0x02,0x02,0x02, //年
0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11, //月
0x00,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f //日
};
void delay_ns(void); //延时函数
void delay(uint num);
void lcd_wcom(uchar com); //写命令
void lcd_wdat(uchar dat); //写数据
void lcd_init(void); //初始化LCD
void lcd_dispchar(uchar x, uchar y, uchar a); //LCD显示单个字符
void lcd_dispstring(uchar x, uchar y, uchar *q); //LCD显示字符串
void time1_init(void) //定时器初始化
{
TMOD = 0x10; //定时器1模式1
TH1 = 0xd8; //定时10MS
TL1 = 0x00;
EA = 1; //开总中断
ET1 = 1; //开定时器1
TR1 = 1; //启动定时器1
}
void main(void)
{
uchar i;
s = 50;
m = 5;
h = 10;
lcd_init();
time1_init();
lcd_wcom(0x40); //自定义的字符
for(i = 0; i < 32; i++)
{
lcd_wdat(my_table[i]);
}
lcd_dispstring(2, 1, "2013"); //显示2013年3月5日
lcd_dispchar(6, 1, 1);
lcd_dispstring(7, 1, "03");
lcd_dispchar(9, 1, 2);
lcd_dispstring(10, 1, "05");
lcd_dispchar(12, 1, 3);
while(1)
{
lcd_dispchar(10, 2, h / 10 + 0x30); //h/10 + 0x30为要显示的数字字符
lcd_dispchar(11, 2, h % 10 + 0x30); //显示小时
lcd_dispchar(12, 2, 0);
lcd_dispchar(13, 2, m / 10 + 0x30);
lcd_dispchar(14, 2, m % 10 + 0x30); //显示分钟
lcd_dispchar(15, 2, 0);
lcd_dispchar(16, 2, s / 10 + 0x30);
lcd_dispchar(17, 2, s % 10 + 0x30); //显示秒
}
while(1);
}
void delay_ns(void)
{
uchar i = 5;
while(i--);
}
void delay(uint num)
{
uchar i;
while(num--)
{
for(i = 0; i < 100; i++);
}
}
void lcd_wcom(uchar com)
{
rs = 0;
rw = 0;
LCD = com;
delay_ns();
en = 1;
en = 0;
delay(10);
}
void lcd_wdat(uchar dat)
{
rs = 1;
rw = 0;
LCD = dat;
delay_ns();
en = 1;
en = 0;
delay(10);
}
void lcd_init(void)
{
en = 0;
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void lcd_dispchar(uchar x, uchar y, uchar a)
{
if(y == 1)
x = 0x80 + x;
else if(y == 2)
x = 0xc0 + x;
else
return;
lcd_wcom(x);
lcd_wdat(a);
}
void lcd_dispstring(uchar x, uchar y, uchar *q)
{
if(y == 1)
x = 0x80 + x;
else if(y == 2)
x = 0xc0 + x;
else
return;
lcd_wcom(x);
while(*q != ' ')
{
lcd_wdat(*q);
q++;
}
}
void time1_isr(void) interrupt 3 using 1 //中断处理函数
{
TH1 = 0xd8;
TL1 = 0x00;
a++;
if(a == 60)
{
a = 0;
s++;
if(s == 60)
{
s = 0;
m++;
if(m == 60)
{
m = 0;
h++;
if(h == 24)
h = 0;
}
}
}
}
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs = P2^5;
sbit rw = P2^6;
sbit en = P2^7;
#define LCD P0
uchar s, m, h; //秒, 分, 时
uint a;
uchar code table[] = "I am dean";
uchar code my_table[] = { //自定义字符码
0x00,0x00,0x00,0x10,0x10,0x00,0x10,0x10, //:
0x04,0x0f,0x1f,0x0a,0x1f,0x02,0x02,0x02, //年
0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11, //月
0x00,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f //日
};
void delay_ns(void); //延时函数
void delay(uint num);
void lcd_wcom(uchar com); //写命令
void lcd_wdat(uchar dat); //写数据
void lcd_init(void); //初始化LCD
void lcd_dispchar(uchar x, uchar y, uchar a); //LCD显示单个字符
void lcd_dispstring(uchar x, uchar y, uchar *q); //LCD显示字符串
void time1_init(void) //定时器初始化
{
TMOD = 0x10; //定时器1模式1
TH1 = 0xd8; //定时10MS
TL1 = 0x00;
EA = 1; //开总中断
ET1 = 1; //开定时器1
TR1 = 1; //启动定时器1
}
void main(void)
{
uchar i;
s = 50;
m = 5;
h = 10;
lcd_init();
time1_init();
lcd_wcom(0x40); //自定义的字符
for(i = 0; i < 32; i++)
{
lcd_wdat(my_table[i]);
}
lcd_dispstring(2, 1, "2013"); //显示2013年3月5日
lcd_dispchar(6, 1, 1);
lcd_dispstring(7, 1, "03");
lcd_dispchar(9, 1, 2);
lcd_dispstring(10, 1, "05");
lcd_dispchar(12, 1, 3);
while(1)
{
lcd_dispchar(10, 2, h / 10 + 0x30); //h/10 + 0x30为要显示的数字字符
lcd_dispchar(11, 2, h % 10 + 0x30); //显示小时
lcd_dispchar(12, 2, 0);
lcd_dispchar(13, 2, m / 10 + 0x30);
lcd_dispchar(14, 2, m % 10 + 0x30); //显示分钟
lcd_dispchar(15, 2, 0);
lcd_dispchar(16, 2, s / 10 + 0x30);
lcd_dispchar(17, 2, s % 10 + 0x30); //显示秒
}
while(1);
}
void delay_ns(void)
{
uchar i = 5;
while(i--);
}
void delay(uint num)
{
uchar i;
while(num--)
{
for(i = 0; i < 100; i++);
}
}
void lcd_wcom(uchar com)
{
rs = 0;
rw = 0;
LCD = com;
delay_ns();
en = 1;
en = 0;
delay(10);
}
void lcd_wdat(uchar dat)
{
rs = 1;
rw = 0;
LCD = dat;
delay_ns();
en = 1;
en = 0;
delay(10);
}
void lcd_init(void)
{
en = 0;
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void lcd_dispchar(uchar x, uchar y, uchar a)
{
if(y == 1)
x = 0x80 + x;
else if(y == 2)
x = 0xc0 + x;
else
return;
lcd_wcom(x);
lcd_wdat(a);
}
void lcd_dispstring(uchar x, uchar y, uchar *q)
{
if(y == 1)
x = 0x80 + x;
else if(y == 2)
x = 0xc0 + x;
else
return;
lcd_wcom(x);
while(*q != ' ')
{
lcd_wdat(*q);
q++;
}
}
void time1_isr(void) interrupt 3 using 1 //中断处理函数
{
TH1 = 0xd8;
TL1 = 0x00;
a++;
if(a == 60)
{
a = 0;
s++;
if(s == 60)
{
s = 0;
m++;
if(m == 60)
{
m = 0;
h++;
if(h == 24)
h = 0;
}
}
}
}
一周热门 更多>