#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar code seg[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20}; //ASC code
#define DPORT P1
sbit RS = P2^5;
sbit RW = P2^6;
sbit EN = P2^7;
uchar idata counter,s,m,h;
void Delay_1ms(uchar j)
{ uchar i=0;
for(;j>0;j--)
{ for(i=0;i<125;i++)
{;}
}
}
void Write_initialize(uchar c)
{
RS=0;
RW=0;
EN=1;
DPORT = c; //将待写数据送到数据端口
_nop_();
_nop_();
Delay_1ms(20);
EN=0;
}
void Write_Word(uchar c)
{
RS=1;
RW=0;
EN=1;
DPORT = c; //将待写数据送到数据端口
_nop_();
_nop_();
Delay_1ms(20);
EN=0;
}
void LcdPos(uchar xPos,uchar yPos)
{
uchar tmp;
xPos&=0x0f; //x位置范围是0~15
yPos&=0x01; //y位置范围是0~1
if(yPos==0) //显示第1行
tmp=xPos;
else
tmp=xPos+0x40; //显示第2行
tmp|=0x80;
Write_initialize(tmp);
}
void WriteChar(uchar c,uchar xPos,uchar yPos)
{
LcdPos(xPos,yPos);
Write_Word(c);
}
void WriteString(uchar *s,uchar xPos,uchar yPos)
{ uchar i;
if(*s==0) //遇到字符串结束
return;
for(i=0;;i++)
{
if(*(s+i)==0)
break;
WriteChar(*(s+i),xPos,yPos);
xPos++;
if(xPos>=15) //如果XPOS中的值未到15(可显示的最多位)
break;
}
}
void SetCur() //设置光标
{
Write_initialize(0x0c); //开显示有光标且闪烁
}
void timer() interrupt 1 //中断子程序执行时间越短越好
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
counter++;
if(counter==20)
{
s++;
counter=0;
if(s==60)
{
m++;
s=0;
if(m==60)
{
h++;
m=0;
if(h==24)
h=0;
}
}
}
}
main()
{
uchar i;
uchar code shen[]={"****CLOCK****"},dian[]={":"};
uchar idata timercode[8]={0};
uchar *s1=shen,*s2=timercode,*s3=dian,p[10];
uchar xPos1=2,yPos1=0,xPos2,yPos2=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
PT0=1;
Delay_1ms(15);
Write_initialize(0x38); // 8BIT,2行,5X7字型
Write_initialize(0x08); // 关闭显示屏
Write_initialize(0x01); // 清除显示屏
Write_initialize(0x06);
Write_initialize(0x0c);
SetCur();
WriteString(s1,xPos1,yPos1);
for(i=0;i<=15;i++)
{Delay_1ms(200);}
while(1)
{
*(p+7)=seg[s%10];
*(p+6)=seg[s/10];
*(p+4)=seg[m%10];
*(p+3)=seg[m/10];
*(p+1)=seg[h%10];
*p=seg[h/10];
s2=p;
WriteString(s3,6,1);
WriteString(s3,9,1);
for(xPos2=4;xPos2<=15;xPos2++,s2++)
WriteString(s2,xPos2,yPos2);
//for(i=0;i<=5;i++)
//{Delay_1ms(20);}
}
}
51单片机+LCD(LM1602)接口设计、编程及资料【免费下载】
4星 · 超过85%的资源 需积分: 31 186 浏览量
2008-11-27
13:08:31
上传
评论 3
收藏 8KB RAR 举报
wqygogo
- 粉丝: 62
- 资源: 31
最新资源
- 基于yolov5识别算法实现的DNF自动脚本源码.zip
- 基于Python实现的自动化办公项目.zip
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页