数字时钟课程设计样本Word文件下载.docx
- 文档编号:20603531
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:25
- 大小:242.82KB
数字时钟课程设计样本Word文件下载.docx
《数字时钟课程设计样本Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字时钟课程设计样本Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
引脚功能阐明
1602LCD采用原则14脚(无背光)或16脚(带背光)接口,各引脚接口阐明如表10-13所示:
编号
符号
引脚阐明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选取
12
D5
5
R/W
读/写选取
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
引脚接口阐明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示屏对比度调节端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一种10K电位器调节对比度。
第4脚:
RS为寄存器选取,高电平时选取数据寄存器、低电平时选取指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
1602LCD指令阐明及时序
1602液晶模块内部控制器共有11条控制指令,如表所示:
序号
指令
清显示
光标返回
*
置输入模式
I/D
S
显示开/关控制
D
C
B
光标或字符移位
S/C
R/L
置功能
DL
N
F
置字符发生存贮器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志或地址
BF
计数器地址
写数到CGRAM或DDRAM)
要写数据内容
从CGRAM或DDRAM读数
读出数据内容
控制命令表
1602液晶模块读写操作、屏幕和光标操作都是通过指令编程来实现。
(阐明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设立I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字与否左移或者右移。
高电平表达有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示开与关,高电平表达开显示,低电平表达关显示C:
控制光标开与关,高电平表达有光标,低电平表达无光标B:
控制光标与否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示文字,低电平时移动光标。
指令6:
功能设立命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7点阵字符,高电平时显示5x10点阵字符。
指令7:
字符发生器RAM地址设立。
指令8:
DDRAM地址设立。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表达忙,此时模块不能接受命令或者数据,如果为低电平表达不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
无
读数据
RS=H,R/W=H,E=H
D0—D7=数据
写数据
RS=H,R/W=L,D0—D7=数据,E=高脉冲
2.设计内容
3.程序设计及硬件电路
程序流程图
3.1原理图(protues)
3.2原理图(protel)
4.仿真成果
上电后按下K0开始运营:
按下K3秒闪烁
按下K1闪烁减一(05调到04)
按下K2加一(04调到05)
依照按下K0次数可以变化闪烁位置进行分,时,年,月,日,星期调节
调节分
调节时
调节年
调节月
调节日
调节星期
5.收获、体会和建议
单片机数字钟可以说是一种较小系统,开始时咱们觉得通过C语言较容易实现,的确,只实现一种可以正常走时并且可以校时数字钟是比较容易。
但咱们想错了,毕竟是第一次从总体角度来考虑地完毕一种小系统,好多实际性问题咱们没有考虑,因此导致咱们最后设计数字钟精度不高,并且存在好多问题,固然问题多了对咱们来说是好事,这样咱们在解决更多问题时学会更多解决问题办法,对咱们也算是长长经验吧。
通过这次对数字钟设计,让我理解了设计电路程序,也让我理解了关于数字钟原理与设计理念,要设计一种完整电路总要通过多次失败才干成功,在设计中,遇到了许多匪夷所思问题,一种人就是想破脑子也做不出来,这时候,就需要去询问教师、和同窗探讨,共同解决浮现问题,也许就是由于教师一句提示、同窗探讨中就会豁然开朗。
。
从这次设计中我也觉得自己还对单片机功能理解只是个皮毛,单片机强大功能还等着咱们去开发。
通过这次设计,不但使我学到了知识,让我对电路设计有了大概理解;
另一方面,还体会到了团队精神。
综上所述,这次设计是成功。
6.参照文献
1杨文龙.单片机原理及应用.西安:
西安电子科技大学出版社,1993
2李朝青.单片机原理及接口技术.北京:
北京航空航天大学出版社,
3胡汉才.单片机原理及系统设计.北京:
清华大学出版社,
4杨忠煌,黄博俊,李文昌.单芯片8051实务与应用.北京:
中华人民共和国水利水电出版社,
7.附:
源程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable1[]={"
-00-00-MON"
};
//星期一MON星期二TUE星期三WED星期四THU星期五FRI星期六SAT星期天SUN
ucharcodetable2[]={"
00:
00:
00"
ucharcodetable[]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
ucharnum,count,miao,fen,xiao,week,day,month,year,shi,ge,flag,num1;
sbitLCD_RW=P3^7;
sbitLCD_RS=P3^5;
sbitLCD_E=P3^4;
sbitk1=P1^0;
//选取
sbitk2=P1^1;
//增长
sbitk3=P1^2;
//减少
sbitk4=P1^3;
//开始
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
//////////////////////////////////////////////////////////////////////////////////////
///lcd显示
voidinit(void);
//初始化函数
voidwrite_com(ucharcommand);
//写指令函数
voidwrite_date(uchardat);
//写数据函数
voidLCD_disp_char(ucharx,uchary,uchardat);
//在某个屏幕位置上显示一种字符,X(0-16),y(1-2)
//voidLCD_check_busy(void);
//检查忙函数。
我没用到此函数,由于通过率极低。
voiddelay_n40us(uintn);
//延时函数
//********************************
//*******初始化函数***************
voidinit(void)
write_com(0x38);
//设立8位格式,2行,5x7
write_com(0x0c);
//整体显示,关光标,不闪烁
write_com(0x06);
//设定输入方式,增量不移位
write_com(0x01);
//清除屏幕显示
delay_n40us(100);
//实践证明,用for循环200次就能可靠完毕清屏指令。
//********写指令函数************
voidwrite_com(uchardat)
P2=dat;
LCD_RS=0;
//指令
LCD_RW=0;
//写入
LCD_E=1;
//容许
LCD_E=0;
delay_n40us
(1);
//实践证明,我LCD1602上,用for循环1次就能完毕普通写指令。
//*******************************
//********写数据函数*************
voidwrite_date(uchardat)
LCD_RS=1;
//数据
//********延时函数***************
voiddelay_n40us(uintn)
{uinti;
ucharj;
for(i=n;
i>
i--)
for(j=0;
j<
2;
j++);
//在这个延时循环函数中我只做了2次循环,
}//实践证明我LCD1602上普通指令只需1次循环就能可靠完毕。
////////////////////////////////////////////////////////////////////////
voidmain()
{
init();
write_com(0x80);
///////初始化
for(num=0;
num<
15;
num++) ////////显示年月日
{
write_date(table1[num]);
delay(5);
}
write_com(0x80+0x40);
num++)/////////////显示时间
write_date(table2[num]);
while
(1)
if(count==20)//////////计时数
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
xiao++;
if(xiao==24)
{
xiao=0;
week++;
if(week==8)week=0;
switch(week)
{
case1:
write_com(0x80+0x0c);
write_date('
M'
);
delay(5);
write_date('
O'
N'
break;
case2:
T'
U'
E'
case3:
W'
D'
case4:
H'
case5:
F'
R'
I'
case6:
S'
A'
case7:
}
day++;
if((month%2==0&
&
day==31)||(month%2==1&
day==32&
month!
=2)||(((year%4==0&
year%100!
=0)||year%400==0)&
month==2&
day==30)||((!
(year%4==0&
day==29))
{////////////////////判断每月有多少天
day=0;
month++;
if(month==13)
{
month=1;
year++;
shi=year/10;
ge=year%10;
write_com(0x80+0x04);
write_date(table[ge]);
write_com(0x80+0x03);
write_date(table[shi]);
}
shi=month/10;
ge=month%10;
write_com(0x80+0x07);
write_date(table[ge]);
write_com(0x80+0x06);
write_date(table[shi]);
}
shi=day/10;
ge=day%10;
write_com(0x80+0x0a);
write_date(table[ge]);
write_com(0x80+0x09);
write_date(table[shi]);
}
shi=xiao/10;
ge=xiao%10;
write_com(0x80+0x45);
write_date(table[ge]);
write_com(0x80+0x44);
write_date(table[shi]);
}
shi=fen/10;
ge=fen%10;
write_com(0x80+0x48);
write_date(table[ge]);
write_com(0x80+0x47);
write_date(table[shi]);
}
shi=miao/10;
ge=miao%10;
write_com(0x80+0x4b);
write_date(table[ge]);
write_com(0x80+0x4a);
write_date(table[shi]);
}//////////////////////////////////////////显示当前年月日和详细时间
if(k1==0)////////////////按键K1按下
{
delay(10);
if(k1==0)
{
TR0=0;
flag++;
num1=0;
if(flag==8)flag=1;
switch(flag)
case1:
write_com(0x80+0x4b);
write_com(0x0f);
case2:
write_com(0x80+0x48);
case3:
write_com(0x80+0x45);
case4:
write_com(0x80+0x0a);
case5:
write_com(0x80+0x07);
case6:
write_com(0x80+0x04);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 时钟 课程设计 样本
![提示](https://static.bdocx.com/images/bang_tan.gif)