简易秒表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计说明书

简易秒表

学院:医药信息工程学院

专业:生物医学工程09

姓名:林胜义冯羡清黄玉娴

学号: 0907512162 0907512142 0907512147 完成时间:2011年6月

一、设计目的

1.单片机的基本原理及相关的简单应用。

2.掌握用单片机设计系统的一般步骤。

3.了解LED数码管的基本知识和驱动方法。

4.掌握单片机系统各个组成部分的作用以及分布位置。

5.学会运用单片机的硬件资源。

二、设计要求

1、要求设计一个秒表,精度为00.01秒;

2、显示位数为4位;

3、有启动、停止、清零功能

三、设计工具

PC机一台

四、元器件

4位共阳数码管(1个)、30P瓷片电容(2个)、12M晶振(1个)、复位按键(3个)、万能板(1块)、连接线(若干)、2K电阻(3个)

五、电路连接

1、本系统中“启动”按钮接在外部中断0口(P3.2)、“停止”按钮接在外部中

断1口(P3.3);

2、本系统中“清零”按钮接在P3.5口(第15管脚);

3、本系统的位选通信号接在P2口的低四位;

4、本系统的LED数据端口使用的是P1,采用了共阳码管,且所选用的万能板空间有限,未加扩流三极管,也未加外部上拉电阻。

详见下图

六、设计原理图

1、数码管脚位图

2、仿真电路图

七、程序流程图

(1)主函数(2)LED动态扫描

(3)外部中断0

八、C程序代码

//////////////////简易秒表//////////////////////////////

////////////////////////////////////////////////////////

#include

unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char led1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的位码

unsigned char temp;

unsigned int msec,sec;

sbit key1=P3^2;

sbit key2=P3^3;

sbit key3=P3^5;

unsigned char key_time1;

unsigned char key_time2;

unsigned char key_time3;

unsigned char led_scan;

unsigned char pro_count;

void delay(unsigned char i) //延时

{

unsigned char j,k;

for(j=0;j

for(k=0;k<255;k++);

}

void T0_INT(void) interrupt 1 //1ms 外部中断{

TH0=0xfc;

TL0=0x18;

msec++;

if(msec==1000)

{

msec=0;

sec++;

if(sec==60)

{

sec=0;

}

}

void scan_key() ///键盘扫描,

{

if(key2==0)

{

key_time2++;

if(key_time2>20)//去抖动等待时间

{

TR0=0;

key_time2=0;

}

}

else

{

key_time2=0;

}

if(key1==0)

{

key_time1++;

if(key_time1>20)

{

TR0=1;

key_time1=0;

}

}

else

key_time1=0;

}

if(key3==0)

{

key_time3++;

if(key_time3>20)

{

TR0=0;

sec=0;

msec=0;

}

}

else

{

key_time3=0;

}

}

void display() //数码管动态扫描显示{

if(led_scan==1)

{

P2=0x02; //个

P1=led1[sec%10];

}

if(led_scan==2)

{

P2=0x01;

P1=led[sec/10];

}

if(led_scan==3)

{

P2=0x04; //小数点后一位

P1=led[msec/100];

}

if(led_scan==4)

{

P2=0x08;

P1=led[msec%10];

}

}

void init_all() //初始化

{

TMOD=0x01;

TH0=0xfc;

TL0=0x18;

EA=1;

ET0=1;

P3=0xff;

led_scan=0;

}

void main() //主函数

{

init_all();

while(1)

{

相关文档
最新文档