单片机实训报告_数字时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机实训报告
——数字时钟
成员:
金龙:2
王利伟:6
许林鹏: 9
春波:0
袁增莘:1
指导老师:翡
12电气自动化一班
2013.12.23—12.29
目录
一、设计目的 (2)
二、设计要求 (2)
2.1显示要求 (2)
2.2校准要求 (2)
2.3选型要求 (2)
三、硬件设计 (3)
3.1L E D电路图 (3)
3.2电路图分析 (4)
3.3键盘功能 (4)
四、程序设计 (5)
4.1程序流程图 (5)
4.2程序 (6)
课题:数字时钟
一、设计目的:
通过实训周学会制作数码管显示时、分、秒的数字可调时钟,近一步熟练掌握编程语言的应用。
二、设计要求:
2.1显示要求:
时钟要求用8位数码管显示,以数字形式显示时、分、秒的时间。且从右端始八位数码管依次显示①秒个位②秒十位③横杠“—”④分个位⑤分十位⑥横杠“—”⑦时个位⑧时十位
2.2校准要求:
时钟要求计时准确,同时要求有校准时间的电路,且以按键校准。
2.3选型要求:
设计单片机选型以STC89C51RC-RD+系列为基础
三、硬件设计:
3.1、LED电路图
3.2电路图分析
本次课题是利用51单片机进行设计。
Led灯是由低电平点亮的,led位的选择是由单片机中的p2口控制的。
*键盘是采用独立式按键:
K1是p3.0;K2是p3.1;
K3是p3.2:K4是p3.3;
3.3键盘功能
K1, 是对时钟调整或调整后进行确定的选择键。
K2,是对选中位置后对其进行加。
K3,是对选中位置后对其进行减。
K4,是进行时分秒的选择位的操作。
四、程序设计
4.1程序流程图
#include
unsigned char shig , shish , fensh ,feng ,miaosh ,miaog;
unsigned char shi, fen ,miao,k=0,n=0;
sbit k1=P3^0; sbit k2=P3^1; sbit k3=P3^2; sbit k4=P3^3;
unsigned char code
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x
77,0x7c,0x39,0x5e,0x79,0x71};
void tt0( ) interrupt 1 { TH0=15536/256;
TL0=15536%256;
n=n+1;
if(n==20)
{ n=0;
miao=miao+1;
if(miao==60)
{ miao=0;
fen=fen+1;
if(fen==60)
{ fen=0;
shi=shi+1;
if(shi==24)
{ shi=0;
}
}
}
}
}
void delay(int ms)
{ int i,j;
for(i=0;i for(j=0;j<110;j++); } void display() { shish=shi/10; shig=shi%10; fensh=fen/10; feng=fen%10; miaosh=miao/10; miaog=miao%10; P0=0; P2=0; P0=table[shish]; delay(1); P0=0; P2=1; P0=table[shig]; delay(1); P0=0; P2=2; P0=0x40; delay(1); P0=0; P2=3; P0=table[fensh]; delay(1); P0=0; P2=4; P0=table[feng]; delay(1); P0=0; P2=5; P0=0x40; delay(1); P0=0; P2=6; P0=table[miaosh]; delay(1); P0=0; P2=7; P0=table[miaog]; delay(1); } void displaysh(char w) { k=k+1; if(k==101)k=0; shish=shi/10; shig=shi%10; fensh=fen/10; feng=fen%10; miaosh=miao/10; miaog=miao%10; if(w!=2||k<=50) { P0=0; P2=0; P0=table[shish] ; delay(1); P0=0; P2=1; P0=table[shig]; delay(1); } P0=0; P2=2; P0=0x40; delay(1); if(w!=1||k<=50) { P0=0; P2=3; P0=table[fensh]; delay(1); P0=0; P2=4; P0=table[feng]; delay(1); } P0=0; P2=5; P0=0x40; delay(1); if(w!=0||k<=50) { P0=0; P2=6; P0=table[miaosh]; delay(1); P0=0; P2=7; P0=table[miaog]; delay(1); } } void main() { char shan=0,flage=0; TMOD=0X01; TH0=15536/256; TL0=15536%256; IP=0; IE=0X82; TR0=1; while(1) { while(flage==0) { display();