数字时钟课程设计报告书文档格式.docx
- 文档编号:21985959
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:25
- 大小:239.62KB
数字时钟课程设计报告书文档格式.docx
《数字时钟课程设计报告书文档格式.docx》由会员分享,可在线阅读,更多相关《数字时钟课程设计报告书文档格式.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朝青.单片机原理及接口技术.:
航空航天大学,2003
3胡汉才.单片机原理及系统设计.:
清华大学,2003
4忠煌,黄博俊,.单芯片8051实务与应用.:
中国水利水电,2001
7.附:
源程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable1[]={"
2011-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_(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_(0x38);
//设置8位格式,2行,5x7
write_(0x0c);
//整体显示,关光标,不闪烁
write_(0x06);
//设定输入方式,增量不移位
write_(0x01);
//清除屏幕显示
delay_n40us(100);
//实践证明,用for循环200次就能可靠完成清屏指令。
//********写指令函数************
voidwrite_(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_(0x80);
///////初始化
for(num=0;
num<
15;
num++) ////////显示年月日
{
write_date(table1[num]);
delay(5);
}
write_(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_(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_(0x80+0x04);
write_date(table[ge]);
write_(0x80+0x03);
write_date(table[shi]);
}
shi=month/10;
ge=month%10;
write_(0x80+0x07);
write_date(table[ge]);
write_(0x80+0x06);
write_date(table[shi]);
}
shi=day/10;
ge=day%10;
write_(0x80+0x0a);
write_date(table[ge]);
write_(0x80+0x09);
write_date(table[shi]);
}
shi=xiao/10;
ge=xiao%10;
write_(0x80+0x45);
write_date(table[ge]);
write_(0x80+0x44);
write_date(table[shi]);
}
shi=fen/10;
ge=fen%10;
write_(0x80+0x48);
write_date(table[ge]);
write_(0x80+0x47);
write_date(table[shi]);
}
shi=miao/10;
ge=miao%10;
write_(0x80+0x4b);
write_date(table[ge]);
write_(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_(0x80+0x4b);
write_(0x0f);
case2:
write_(0x80+0x48);
case3:
write_(0x80+0x45);
case4:
write_(0x80+0x0a);
case5:
write_(0x80+0x07);
case6:
write_(0x80+0x04);
case7:
write_(0x80+0x0c);
write_(0x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 时钟 课程设计 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)