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