单片机课程设计-秒表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计
姓名:***
学号:
设计课题:秒表
指导老师:
同组人员:*********
设计时间:2009年12月16日
一、设计目的
1.单片机的基本原理及相关的简单应用。
2.掌握用单片机设计系统的一般步骤。
3.了解LED数码管的基本知识和驱动方法。
4.掌握单片机系统各个组成部分的作用以及分布位置。
5.学会运用单片机的硬件资源。
二、设计要求
1、要求设计一个秒表,精度为00.01秒;
2、显示位数为4位;
3、有启动、停止、清零功能
三、设计工具
1.PC机一台
2.TDN-MI教学实验系统一台(配串行口通讯线)
四、元器件
4位数码管(1个)、30P瓷片电容(2个)、12M晶振(1个)、12*12键盘(2个)、面包板(1块)、连接线(若干)、10K排阻(1个)
五、电路连接
1、本系统中“启动/停止”按钮接在外部中断0口(P3.2);
2、本系统中“清零”按钮接在RST脚(第9管教);
3、本系统的位选通信号接在P1口的低四位;
4、本系统的LED数据端口使用的是P0口,由于采用了共阴数码管,且面包板上空间有限,未加扩流三极管,只使用了上拉电阻。
5、为使电路工作更加稳定,加了上电复位电路。
详见下图
六、设计原理图
1、3641数码管脚位图
2、系统电路图
七、程序流程图
(1)主函数(2)LED动态扫描
八、设计程序
/************************************************
设计题目:秒表
设计要求:设计带启动、停止、清零功能的秒表
利用4位数码管,显示整数两位和小数两位
设计者:何友东付艳娟
设计精度:0.01s
完成日期:09.12.16
*************************************************/
#include "reg52.h"
#include "intrins.h"
//************** PIN CONFIGURE ********************
sbit Start_Stop = P3^2; //定义启动/停止按键
sbit Clear = P3^3; //定义清零按键
sbit Sel_A1 = P1^0; // 定义数码管第一位
sbit Sel_B1 = P1^1; // 定义数码管第二位
sbit Sel_C1 = P1^2; // 定义数码管第三位
sbit Sel_D1 = P1^3; // 定义数码管第四位
#define LED P0 //定义LED 数据端口
#define DP 0x80 //定义小数点
//**************************************************
bdata unsigned char flag; //定义标志寄存器
sbit Status_Flag = flag^0; //1----计时0----停止
sbit Is_KeyS_Hold = flag^1; //定义键盘释放判断标志位
//1---未释放0---释放
unsigned char xiaoshu1 = 0 , //定义计时的小数部分,第一位
xiaoshu2 = 0 , //定义小数部分第二位
miao1 = 0 ; //定义计时的整数部分第一位(十位)
miao2 = 0 ; //定义整数部分第二位(个位)
code unsigned char table[]={0x3f,0x06,0x5b, // 定义0~9 编码
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,};
//******************函数声明*************************
void init(); //初始化函数
void display(); // 数码管显示函数
void delay(); //数码管单个显示延时函数
void key(); //键盘释放判断操作函数
//****************************************************
//*********************主函数************************* void main()
{
init(); //调用初始化函数
while(1)
{
key(); //调用键盘操作函数
display(); //调用LED动态显示函数
}
}
//********************键盘释放判断操作函数************* void key() //启动停止按钮释放键盘判断
{
if(Is_KeyS_Hold)
if(Start_Stop)
{
Is_KeyS_Hold = 0 ;
EX0 = 1 ;
}
}
//****************display()的内部延时函数*************** void delay()
{
unsigned int i ;
for(i = 0; i<300; i++);
}
//***************LED的动态显示函数********************** void display()
{
Sel_A1 = 1;
Sel_B1 = 1;
Sel_C1 = 1;
Sel_D1 = 0;
LED = table[xiaoshu2];delay(); //显示小数的第二位
Sel_A1 = 1;
Sel_B1 = 1;
Sel_C1 = 0;