标题:
lcd1602显示(时钟)可调分钟和小时 带单片机源代码与proteus
[打印本页]
作者:
fangmojia
时间:
2017-6-6 10:18
标题:
lcd1602显示(时钟)可调分钟和小时 带单片机源代码与proteus
lcd显示基础代码,用来显示时钟,可调分钟和小时。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):
0.png
(34.7 KB, 下载次数: 32)
下载附件
2017-6-6 18:09 上传
0.png
(78.14 KB, 下载次数: 42)
下载附件
2017-6-6 18:09 上传
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar msec=0,sec=0,min=0,hr=0;
sbit RS=P2^0;
sbit RW=P2^1;
sbit E =P2^2;
uchar code dis[] = {" Welcome to "};
//延时子程序
void delay(uchar ms)
{
uchar i;
while(ms--)
{
for(i=0;i<250;i++);
}
}
//测试LCD忙状态
bit lcd_bz()
{
bit result;
E = 0;
RS = 0;
RW = 1;
P0 = 0xFF;
E = 1;
delay(1);
result = (bit)(P1&0x80);
E = 0;
return result;
}
//写指令
void lcd_wcmd(uchar cmd)
{
E = 0;
RS = 0;
delay(1);
RW = 0;
delay(1);
P0 = cmd;
delay(1);
E = 1;
delay(1);
E = 0;
}
//设定显示位置
lcd_pos(uchar pos)
{
lcd_wcmd(pos|0x80);
}
//写入字符
void lcd_wdat(uchar dat)
{
E = 0;
RS = 1;
delay(1);
RW = 0;
delay(1);
P0 = dat;
delay(1);
E = 1;
delay(1);
E = 0;
}
//LCD初始化
lcd_init()
{
lcd_wcmd(0x38);// 模式设置
delay(1);
lcd_wcmd(0x0C);// 显示设置
delay(1);
lcd_wcmd(0x06);// 显示模式
delay(1);
lcd_wcmd(0x01);// 清屏
delay(1);
}
lcd_time(uchar t)
{
lcd_wdat(t/10+48);
lcd_wdat(t%10+48);
}
//主程序
void main(void)
{
uchar n;
lcd_init(); //初始化
IE = 0x87;
IP = 0x05;
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TMOD = 0x01;
TCON = 0x15;
delay(5);
lcd_pos(0x00); //第一行显示
n = 0;
while(dis[n]!='\0')
{
lcd_wdat(dis[n]);
n++;
}
while(1)
{
lcd_pos(0x44);
lcd_time(hr);
lcd_wdat(':');
lcd_time(min);
lcd_wdat(':');
lcd_time(sec);
}
}
//外部中断0实现分钟加1
void mplus() interrupt 0
{
min++;
if(min==60)
min = 0;
}
//外部中断1实现小时加1
void hplus() interrupt 2
{
hr++;
if(hr==24)
hr = 0;
}
//定时中断计时
void jishi() interrupt 1
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
msec++;
if(msec==20)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
lcd显示时钟.rar
(59.63 KB, 下载次数: 33)
2017-6-6 10:16 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1