项目二 电子时钟制作工作页.docx
《项目二 电子时钟制作工作页.docx》由会员分享,可在线阅读,更多相关《项目二 电子时钟制作工作页.docx(27页珍藏版)》请在冰豆网上搜索。
项目二电子时钟制作工作页
电子时钟制作
课程目标
1.能根据给定任务,明确项目任务和任务要求。
2.能根据原理图,设计布线图。
3.能独立规范使用仪器仪表与工具。
4.能独立进行系统电路设计、安装、编程调试,通过验收,填写验收表格,并签字确认。
5.能按照企业管理制度,确定填写维修记录并归档,确保记录的可追溯性,为以后维修提供参考资料。
6.工作过程中能自觉遵守作业规范。
7.能自觉清理场地、归置物品。
建议课时48
情景描述
本项目的最终目标是设计一个用单片机作为控制核心,以数码管为显示的电子时钟系统。
任务要求
电子钟由电路和程序两部分组成。
可以进行时、分、秒显示;通过按键可以进行时、分、秒调整等功能。
从硬件上看,它主要由以下部分组成:
数码管显示器、按键输入、外围电路等器件。
能够实现数字输入、数字更改等功能。
通过本项目的学习。
熟悉单片机的输入与输出控制的键盘与显示接口技术;中断、定时、按键等技术。
熟悉数码管、按键、蜂鸣器等器件。
任务内容
任务一秒表的设计与制作
任务二按键变数的设计与制作
任务三电子钟的设计与制作
任务一秒表的设计与制作
学习目标
通过学习任务一,熟悉单片机的数码管显示技术等。
任务描述
秒表的设计与制作由电路和程序构成。
从硬件上看,它主要由:
最小系统、数码管等器件组成。
能够实现数码管的显示,显示范围是00–59,程序上涉及计数、中断、定时的编写。
学习地点单片机实训室
课时16
学习过程
(一)技能要点
1、硬件电路制作
电路原理图
2、元器件清单
代 号
名 称
实 物 图
规 格
R1/R2
电阻
2k/200
RP1
排阻
8×1K
C1、C2
瓷介电容
30pF
C3
电解电容
22μF
S1
轻触按键
CY
晶振
12MHz
IC1
单片机
AT89C52
IC插座
40脚
VD1
数码管
四位一体共阴数码管
3、数码管简介
数码管分共阴和共阳二种
4、数码管引脚图
1)一体数码管的管脚图
一体数码管,其内部段已相互连接好。
我们的任务就是找出管脚所对应的数码管的段和位。
2)二位一体数码管的管脚图
二位一体数码管,有用的是二个位选,八个段选共十个管脚。
型号不同管脚图不一样。
用万用表来测,把万用表打到检验二极管的那一档,先找到两个公共端,共阳的公共端接正极,用万用表负极在各段上试,得出abcdefghdp引脚。
二位一体数码管的引脚特点,其A-11B-7C-4D-2E-1F-10G-5DP-3其中12-9为公共端。
3)三位一体数码管的管脚图
三位一体数码管,有三个位选,八个段选共十一个管脚。
型号不同管脚图不一样。
三位一体数码管的引脚特点,其A-11 B-7 C-4 D-2 E-1 F-10 G-5 DP-3其中9-8-6为公共端。
4)四位一体数码管的管脚图
四位一体数码管,有四个位选,八个段选共十二个管脚。
型号不同管脚图不一样。
引脚大致如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位
。
。
。
。
。
。
1 a f 2 3 b
。
。
。
。
。
。
e d dp c g 4
即:
12-9-8-6为公共端,A-11 B-7 C-4 D-2 E-1 F-10 G-5 DP-3
5、数码管的检测
数码管的共阴与共阳的区分
识别是共阴型的还是共阳型的数码管,可以通过测量它的管脚,找公共共阴和公共共阳:
首先,我们找个电源(3到5伏)和1个1K(几百欧的也行)的电阻,电源串接电阻后和地接在任意2个脚上,组合有很多,但总有数码管的一段会发光,找到一个然后地不动,电源(串电阻)逐个碰剩下的脚,如果其他段(一般是7段,一个点)也亮,那它就是共阴的了。
相反电源不动,地逐个碰剩下的脚,如果其他段(一般是7段,一个点)也亮,那它就是共阳的。
直接用万用表,同测试普通半导体二极管一样。
注意!
万用表应放在R×10K档,因为R×1K档测不出数码管的正反向电阻值。
对于共阴极的数码管,红表笔接数码管的“-”,黑表笔分别接其他各脚。
测共阳极的数码管时,黑表笔接数码管的“+”,红表笔接其他各脚。
红表笔是电源的正极,黑表笔是电源的负极。
(二)程序编写
1、程序编写
#include//头文件
#defineucharunsignedchar//声明变量
#defineuintunsignedint
ucharcnt,miao_ge,miao_shi;//计数变量
Ucharcodeledcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//0-F
ucharcodeledwei[]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};//位码
voiddelay(uintz)//延时函数
{
while(z--);
}
voidled(ucharduan,wei)
{
P2=ledwei[wei];//P2口为段码显示
P0=ledcode[duan];//P0口为位码显示
}
voidtimer0()interrupt1//定时中断子程序
{
TH0=0x3C;//给定时器赋初值50ms
TL0=0xB0;
cnt++;//中断一次加一
}
voidmain()//主程序
{
ucharmiao;//初始化
TMOD=0x01;//设置定时器0工作方式1
TH0=0x3C;//50ms定时
TL0=0xB0;
EA=1;//开总中断
ET0=1;//开定时/计数期0中断
TR0=1;//启动定时/计数期0
while
(1)//循环
{
if(cnt==20)//计数
{
cnt=0;//中断标志位0
miao++;
if(miao==60)//满60变为0
{
miao=0;
}
}
miao_ge=miao%10;
miao_shi=miao/10;
led(miao_ge,7);//第8个数吗管
delay(500);//延时
led(miao_shi,6);//第7个数吗管
delay(500);//延时
}
}
2、程序仿真
3、烧写芯片
(三)秒表制作要点
1)根据自己设计的电路图,完成焊接与组装任务。
焊接注意事项:
(1)元件的成形,电阻采用卧式安装法。
(2)数码管注意方向和管脚。
(3)所有集成电路先装IC座,严禁将IC直接焊接在电路板上。
(4)排阻注意第一脚的位置。
(5)按键注意方向。
2)程序设计。
程序设计训练步骤:
(1)八位数码管的静、动态扫描显示程序设计与调试。
(2)定时/计数器、中断控制程序的设计与调试。
(3)定时器和数码管显示的综合程序设计与调试。
知识要点:
1.数码管简介
(1)静态显示
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。
优点是编程简单,显示亮度高,缺点是占用I/O端口多。
(2)数码管动态显示
利用发光二极管的余辉效应和人眼的视觉暂留效应,通过分时轮流控制各个数码管的位选端,使各个数码管轮流受控显示。
动态扫描频率太低,LED数码管将出现闪烁现象;频率太高,由于每个LED数码管点亮的时间太短,LED数码管的亮度太低,无法看清。
因此,在编程时,常采用调用延时子程序来达到要求的保持时间,一般取几毫秒为宜。
(3)显示字形码
显示字符
字形
共 阳 极
共 阴 极
dp
g
f
e
d
c
b
a
字形码
dp
g
f
e
d
c
b
a
字形码
0
1
1
0
0
0
0
0
0
C0H
0
0
1
1
1
1
1
1
3FH
1
1
1
1
1
1
0
0
1
F9H
0
0
0
0
0
1
1
0
06H
2
1
0
1
0
0
1
0
0
A4H
0
1
0
1
1
0
1
1
5BH
3
1
0
1
1
0
0
0
0
B0H
0
1
0
0
1
1
1
1
4FH
4
1
0
0
1
1
0
0
1
99H
0
1
1
0
0
1
1
0
66H
5
1
0
0
1
0
0
1
0
92H
0
1
1
0
1
1
0
1
6DH
6
1
0
0
0
0
0
1
0
82H
0
1
1
1
1
1
0
1
7DH
7
1
1
1
1
1
0
0
0
F8H
0
0
0
0
0
1
1
1
07H
8
1
0
0
0
0
0
0
0
80H
0
1
1
1
1
1
1
1
7FH
9
1
0
0
1
0
0
0
0
90H
0
1
1
0
1
1
1
1
6FH
熄灭
1
1
1
1
1
1
1
1
FFH
0
0
0
0
0
0
0
0
00H
2.定时、计数的概念
(1)计数概念
(2)计数器的容量
(3)定时
(4)溢出
(5)任意定时及计数的方法
3.定时/计数器概述
(1)定时/计数器的方式控制字
TMOD位
D7
D6
D5
D4
D3
D2
D1
D0
位名称
GATE
C/T
M1
M0
GATE
C/T
M1
M0
功能
门控位
定时/计数方式选择
工作方式选择
门控位
定时/计数方式选择
工作方式选择
高4位控制定时器/计数器1
低4位控制定时器/计数器0
(2)定时/计数器的4种工作方式
①工作方式0。
定时/计数器的工作方式0称为13位定时/计数方式。
它由TL的低5位和TH的8位构成13位的计数器,TL的高3位未用。
②工作方式1。
工作方式1是16位的定时/计数方式,M1M0为01,其他特性与工作方式0相同。
③工作方式2。
工作方式2是16位加法计数器,TH0和TL0具有不同功能,其中,TL0是8位计数器,TH0是重置初值的8位缓冲器。
方式2具有初值自动装入功能,每当计数溢出,就会打开高、低8位之间的开关,预置数进入低8位。
这是由硬件自动完成的,不需要由人工干预。
④工作方式3。
定时/计数器工作于方式3时,定时器T0被分解成两个独立的8位计数器TL0和TH0。
(3)三种工作方式定时时间的比较
晶振频率fosc=12MHz
方式0(13位):
8192us
方式1(16位):
65536us
方式2(8位):
256us
当晶振频率为12M时最长定时时间为65.536ms,怎样才能实现1秒定时。
(2)定时/计数器的编程和应用
例1用定时器1方式0实现1s的延时。
解:
因方式0采用13位计数器,其最大定时时间为:
8192×1s=8.192ms,因此,定时时间不可能像方式1一样选择50ms,但可选择定时时间为5ms,再循环200次。
定时时间选定后,再确定计数值为5000,则定时器1的初值为:
X=M−计数值=8192−5000=3192=C78H=0110001111000B
因13位计数器中TL1的高3位未用,应填写0,TH1占高8位,所以,X的实际填写值应为:
X=0110001100011000B=6318H
即TH1=63H,TL1=18H,又因采用方式0定时,故TMOD=00H。
例2利用T0方式0产生1ms的定时,在P1.0端口上输出周期为2ms的方波。
设晶振频率为6MHz。
解:
要在P1.0得到周期为2ms的方波,只要使P1.0端口每隔1ms取反一次即可。
①设置T0的方式字。
T0的方式字为:
TMOD=00H。
TMOD.0、TMOD.1M1M0=00,T0工作在方式0;
TMOD.2=0,T0为定时状态;
TMOD.3GATE=0,表示计数不受控制;
TMOD.4~TMOD.7可为任意字,因不用T1,这里均取“0”值。
②计算1ms定时T0的初值。
晶振频率为6MHz,则机器周期为2μs,设T0的初值为X,则:
(213 − X)×2×10−6=1×10−3,这样X=7692D=1111000001100B=0F00CH。
因此,TH0的初值为F0H,TL0的初值为0CH。
③编程。
能力拓展
1、到计时秒表的设计与制作
2、8只数码管显示不同的数字设计与制作
3、8只数码管滚动显示数字(移位显示)设计与制作
任务二按键变数的设计与制作
学习目标
通过学习任务二,熟悉单片机的按键控制技术等。
任务描述
按键变数的设计与制作由电路和程序构成。
从硬件上看,它主要由:
最小系统、数码管、按键等器件组成。
本任务为使用三个独立按键,按下按键A使数字变大,按下按键B使数字变小,按下按键C清零。
要求使用按键识别方法、按键抖动消除等技术。
学习地点单片机实训室
课时16
学习过程
(一)技能要点
1、硬件电路制作
电路原理图
2、元器件清单
代 号
名 称
实 物 图
规 格
R1/R2
电阻
2k/200
RP1
排阻
8×1K
C1、C2
瓷介电容
30pF
C3
电解电容
22μF
S1、S2、S3、S4
轻触按键
CY
晶振
12MHz
IC1
单片机
AT89C52
IC插座
40脚
VD1
数码管
四位一体共阴数码管
(3)按键简介
按键简单的说就是一个开关。
按键根据结构可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
目前,单片机系统中最常见的是触点式开关按键。
(4)按键的检测
直接用万用表,R×1电阻挡,检测按键的通断即可。
(二)程序编写
1、程序编写
#include//头文件
unsignedcharNumb;//定义变量
voiddelay10ms(void)//延时10ms
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voiddelay02s(void)//延时0.2s
{
unsignedchari;
for(i=20;i>0;i--)
{
delay10ms();//调用延时10ms
}
}
voidmain(void)//主程序
{
while
(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
Numb++;
if(Numb==4)
{
Numb=0;
}
while(P3_7==0);
}
}
switch(Numb)//提供四种选择
{
case0:
P1_0=~P1_0;
delay02s();
break;
case1:
P1_1=~P1_1;
delay02s();
break;
case2:
P1_2=~P1_2;
delay02s();
break;
case3:
P1_3=~P1_3;
delay02s();
break;
}
}
}
2、程序仿真
3、烧写芯片
(三)按键变数制作要点
1)根据自己设计的电路图,完成焊接与组装任务。
焊接注意事项:
(1)元件的成形,电阻采用卧式安装法。
(2)数码管注意方向和管脚。
(3)所有集成电路先装IC座,严禁将IC直接焊接在电路板上。
(4)排阻注意第一脚的位置。
(5)按键注意方向。
2)程序设计。
程序设计训练步骤:
(1)独立按键程序设计与调试。
(2)矩阵按键程序设计与调试。
(3)数码管显示、按键控制的综合程序设计与调试。
知识要点
1、独立式键盘
单独按键键盘很简单:
只需要测试与按键相连接口线的电平即可。
如果是高电平则没有被按下;如果是低电平则该按键被按下。
2、行列式键盘
单个按键在键盘上的结构
(1).行列式键盘工作原理
行列式键盘电路原理如上图所示。
按键设置在行列式交点上,行列线分别连接到按键开关的两端。
当行线通过上拉电阻接+5伏时,被钳位在高电平状态。
键盘中有无按键按下是由列线送入全扫描字、行线读入行线状态来判断的。
键盘中哪一个键按下可由列线逐列置低电平后,检查行输入状态来判断。
(2)行列式键盘工作过程
A判断有没有键被按下
B键盘抖动的消除
C键盘按下键的辨认
D键盘松开的等待
A判断案键的按下
首先判断是否有按键动作
P10、P11、P12三线有上拉电阻,平时高电平
输出P13、P14、P15、P16低电平,
如果没有键盘按下,P10、P11、P12仍高电平
如果有键盘按下,P10、P11、P12就有低电平出现
B机械按键的抖动消除
抖动现象:
按键按下过程,列线的状态如下
按下按键前,列线为高电平松开按键之后
按键按下与送开后,列线处于抖动的不稳定状态
根据机械键盘的特性,抖动的时间在10—30毫秒之间
所以,一般在判断到有可能是按键按下之后,再延时10—30毫秒,再判断,这时已经是键盘按下的稳定时期。
——没有抖动了!
!
下面的事情就是判断是哪个键被按下了
C判断是哪个按键被按下
一行一行地扫描:
什么叫扫描?
送出低电平给行线,再判断列线状态比如:
P13低电平,如果P11被检测到也是低则说明在P13与P11的交叉点上的按键,被按下了!
!
四行全扫一遍,就得到全部情况
D等待按键松开
原因:
如果按键没有松开就退出程序则又检测到有按键被按下了,如果等松开再退出,则只得到唯一一个被按下的按键值。
3、键盘工作方式
键盘的工作方式:
编程扫描方式、定时扫描方式、中断扫描方式三种。
在键盘扫描子程序中完成下述几个功能。
(1)判断键盘上有无键按下
(2)去键的机械抖动影响。
(3)求按下键的键号。
(4)键闭合一次仅进行一次键功能操作
中断式
查询式
中断方式键盘接口
能力拓展
1、个位数的加减乘除计算器的设计与制作
2、密码锁的设计与制作
任务三电子钟的设计与制作
学习目标
通过学习任务三,熟悉单片机输入与输出控制技术等。
任务描述
电子钟的设计与制作由电路和程序构成。
从硬件上看,电子钟采用八位数码管显示,能够显示小时,分钟和秒,用三个按键来调整时、分、和秒,你还可以增加定时闹钟等功能。
涉及数码管显示的方法、独立式按键识别、计时和中断处理方法等。
学习地点单片机实训室
课时16
学习过程
(一)技能要点
1、硬件电路制作
2、元器件清单
代 号
名 称
实 物 图
规 格
R1/R2
电阻
2k/200
RP1
排阻
8×1K
C1、C2
瓷介电容
30pF
C3
电解电容
22μF
S1、S2、S3、S4
轻触按键
CY
晶振
12MHz
IC1
单片机
AT89C52
IC插座
40脚
VD1
数码管
四位一体共阴数码管
(二)程序编写
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitkey1=P3^5;
sbitkey2=P3^6;
sbitkey3=P3^7;
//sbitbuzzer=P3^0;
ucharcnt,shi,fen,miao,shi_shi,shi_ge,fen_shi,fen_ge,miao_shi,miao_ge;
ucharcodeledcode[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40};//共阴dp~a
//ucharcodeledcode[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0x40};//共阴a~dp
//ucharcodeledcode[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x40};//共阳a~dp
//ucharcodeledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x40};//共阳dp~a
ucharcodeledwei[]={0XEF,0XDF,0XBF,0X7F,0XFE,0XFD,0XFB,0XF7};
voiddelay(uintz)
{
while(z--);
}
voidled(ucharduan,wei)
{
P2=ledwei[wei];
P0=ledcode[duan];
}
voidtimer0()interrupt1
{
TH0=0x3C;//50ms定时
TL0=0xB0;
cnt++;
if(cnt==20)
{
cnt=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
if(key1==0)//调秒按键
{