单片机课程设计-秒表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档