单 片 机 课 程 设 计
单片机课程设计报告
一、实验题目
秒表系统设计——用两个数码管来显示秒表数据,一个显示秒,另一个显示
十分之一秒。
二、系统总体功能
用两个数码管来显示秒表数据,一个显示秒,另一个显示十分之一秒。有
一个按键来启动秒表的开始和结束。增加一个清零按钮,计时结束后可以
清零。
三、实验目的
1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。
2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识
的理解,具备设计单片机应用系统的能力。
3、 通过本次课程设计加深对单片机掌握定时器、外部中断的设置和编程原理的
全面认识复习和掌握,对单片机实际的应用作进一步的了解。
4、 通过本次试验,增强自己的动手能力。认识单片机在日常生活中的应用的广
泛性,实用性。
四、系统设计方案
本实验利用单片机的定时器/计数器定时和记数的原理,通过采用 proteus
仿真软件来模拟实现。模拟利用 AT89C51 单片机、LED 数码管以及控件来控制秒
表的计数以及计数的开启/暂停/继续与复位!
其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码
管显示十分之一秒,十分之一秒的数码管计数从 0~9,满十进一后显示秒的数码
共 10页
第 1页
单 片 机 课 程 设 计
管的数字加一,并且十分之一秒显示清零重新从零计数。计秒数码管采用两位的
数码管,当计数超过范围是所有数码管全部清零重新计数。
五、试验设计所需硬件(模拟硬件)
Atmel89C51 单片机芯片一个、LED 数码显示管三个,低压电源、开关(按
钮)两个、电阻、电容及导线若干。
由于条件限制本实验采用软件模拟硬件系统,采用 proteus 软件进行模拟设
计及调试工作。
图 1 七段数码管引脚图
图 2
Atmel89C51 单片机外部引脚图
共 10页
第 2页
单 片 机 课 程 设 计
六、试验设计原理图
图 3 试验设计电路图
七、软件设计分析
程序流程图:
共 10页
第 3页
单 片 机 课 程 设 计
手动开关
程序开始
对定时器/计
数器初始化
始化
开中断并
启动定时器
定时器溢出中断
对定时器重新赋值
进行加一操作后重新计算时间
往 P0 口和 P2 口送显示时间
数码管显示
判断 P0^4 口是否有低
电平信号
否
判断 P0^7 口是否有低
电平信号
中断返回主函数
否
是
开始、暂停或者
继续
是
计数置零
共 10页
第 4页
单 片 机 课 程 设 计
实验程序清单:
#include
{
sbit sta_end=P3^4;
sbit reset=P3^7;
unsigned char code table0[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
/* 声 明 second10 用 于 计 数 十 分 之 一 秒 变 化 , second1 用 于 记 录 秒 的 个 */
/*位,second2 用于记录秒的十位*/
unsigned int second10,second1,second2;
bit bdata flag;
/*以下是设置延时功能的函数*/
void delay()
unsigned char i,j;
for(i=90;i>0;i--)
for(j=200;j>0;j--);
{
}
}
共 10页
第 5页
单 片 机 课 程 设 计
/*以下是设置时间的函数*/
void
setTime()
{
second10++;
if(second10==10)
/*当十分之一秒计数到十后从零重新计时*/
{
second10=0;
second1++;
/*同时秒计时个位加一*/
if(second1==10)
/*当秒计数个位到十后从零重新计时*/
/*同时秒计时十位加一*/
second1=0;
second2++;
if(second2==6)
second2=0;
{
}
}
}
/*以下是向 LED 管输数据并使之显示的函数*/
void dispact()
{
P3=0xfe;
P0=table1[second1];
delay();
P3=0xfd;
P0=table1[second2];
delay();
P2=table0[second10];
共 10页
第 6页
}
单 片 机 课 程 设 计
/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/
/*十分之一秒刷新一次,实现十分之一秒进一*/
Timer0 () interrupt 1 using 1
{
}
TH0 = (65535 - 50000)/256;
TL0 = (65535 - 50000)%256;
if(flag)
setTime();
dispact();
void main(void)
{
TMOD = 0x01;
TH0 = (65535 - 50000)/256;
/*定时器赋初值*/
TL0 = (65535 - 50000)%256;
flag = 0;
EA = 1;
TR0 = 1;
ET0 = 1;
do
{
if(!sta_end)
{
if(flag == 0)
flag = 1;
else flag = 0;
/*cpu 开中断*/
/*利用定时器 0*/
/*外部中断允许*/
共 10页
第 7页
}
单 片 机 课 程 设 计
if(!reset)
/*复位设置,全部清零*/
{
}
flag = 0;
second10 = 0;
second1 = 0;
second2 = 0;
}while(1);
}
八、试验设计总结
通过这一周的课程设计,我对一些专业知识和电子设计有了更深的了解,
同时也尝试着去应用自己的所掌握的知识。本次电子课程设计主要是对已学习的
模拟电子技术、数字电子技术和单片机的综合应用,同时加上电路等知识,设计
完成了利用软件模拟的秒表。经过几天的奋战,我感受很深.
我和刘傲辉、龙贤三个人一块儿讨论设计了此次试验,在设计过程中深感自
己在培养动手能力这方面还需很大的努力。同时,通过这次我们积极的通过网络,
书籍等资源,在同学的帮助下,把这个课程设计作为一次锻炼,为以后生活学习
中培养善于动手,乐于动手的习惯。
单片机课程设计不仅给我们提供了一个很好的展现应用自己所掌握的知识
的平台,又是检验自己所学知识的一次考核。 我们运用各自在各方面的优势中和
起来,形成了一个团队.通过团队力量,才使设计得以完成.可以说,我们三个人是
一个不可或缺的整体,少了任何一个人都是无法完成任务的。
在设计的过程中我们也不可避免的遇到了很多的问题。尤其是在调试过程中,
会因为某些原因出不来结果,或三个人之间出现了意见分歧,但在最后都达成了
共 10页
第 8页