电子钟实验报告.c..doc
文本预览下载声明
2011-2012学年上半年工程实训实验报告
------电子钟制作
姓名:付攀
学号:8000609066
班级:计软092班
实验目的:通过编程与仿真,制作电子钟实物。电子钟实现时钟功能、时钟调整功能、秒表功能、闹钟功能。同时体会制作实物的过程,包括编程、仿真、和焊接。
实验器材:
器件名称 数量 单片机AT89C52 1 共阳极数码管(2个一排) 1 共阳极数码管(4个一排) 1 发光二极管 1 按键 4 晶振12M 1 30P电容 2 10μ电容 1 电阻200Ω 1 电阻5.1K 3 排阻200Ω*8 2 驱动芯片ULN2803 1 40脚IC插座 2 18脚IC插座 1 28脚IC插座 1 排座 180孔 插线 若干
按键说明:一个用于小时加,一个用于分钟加,一个用于功能切换,一个用于复位。
实验流程:总体步骤:1.编程与仿真
2.焊接制作实物。
流程说明:在protues仿真平台上画出仿真图,在keil平台上编写程序,编译运行生成hex文件,把hex文件灌入仿真图中,进行电子钟仿真。
仿真截图如下:
时钟显示
时间调整
秒表计时
闹钟设置
所编写的程序如下:
#include reg51.h
sbit thour=P1^0;
sbit tmin=P1^1;
sbit light=P1^2;
sbit rst=P1^4;
#define uchar unsigned char
#define uint unsigned int
int flag;
uint count1,count2;
uchar hour=0,min=0,sec=0;
uchar msec=0,se=0,mi=0;
uchar h=7,m=10,s=0;
uchar table[30]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极数码管,分别表示0~9
void delay(uint k) //延时函数
{
uint i,j;
for(i=0;i120;i++)
for(j=0;jk;j++);
}
void display() //时钟显示函数
{
delay(1);P2=0xdf;P0=table[hour/10];
delay(1);P2=0xef;P0=table[hour%10];
delay(1);P2=0xf7;P0=table[min/10];
delay(1);P2=0xfb;P0=table[min%10];
delay(1);P2=0xfd;P0=table[sec/10];
delay(1);P2=0xfe;P0=table[sec%10];
}
void settime() //时间调整函数,小时加和分加
{
if (tmin==0)
{
delay(1);
if (tmin==0)
{
min++;
if(min=60) min=0;
}
while(tmin==0) display();
}
if (thour==0)
{
delay(1);
if (thour==0)
{
hour++;
if(hour=24) hour=0;
}
while(thour==0) display();
}
}
void init1() //定时计数器0的初始化
{
//TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
}
void display2() //秒表显示函数
{
delay(1);P2=0xdf;P0=table[mi/10];
delay(1);P2=0xef;P0=table[mi%10];
delay(1);P2=0xf7;P0=table[se/10];
delay(1);P2=0xfb;P0=table[se%10];
delay(1);P2=0xfd;P0=table[msec/10];
delay(1);P2=0xfe;P0=table[msec%10];
}
void init2() //定时计数
显示全部