- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. . . . .
. 专业word可编辑 .
实 验 报 告
系别 信工系 专业 班级 姓名 学号
课题名称:
简易秒表设计
实验目的:
熟悉Keil C51软件的使用方法及proteus仿真软件的使用;
综合运用所学的理论知识(数码管、按键),通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
通过本次试验,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用性。
设计要求:
制作简易秒表,用三个按键分别实现秒表的启动、停止与复位,利用两位共阴级的数码管显示时间。
设计思路:
硬件设计:数码管部分采用2位共阴极的数码管,在P0口接上拉电阻,公共端低电平扫描。按键电路部分,将按键一侧与单片机任一I/O口相连。
软件设计:模块化思想,使用定时器T0的工作方式1,编写显示子程序,延时子程序,初始化程序,主程序设计时注意按键消抖。
原理图:
源代码:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^0; //定义"启动"按钮
sbit key2=P3^1; //定义"停止"按钮
sbit key3=P3^2; //定义"复位"按钮
sbit wei1=P2^6; //定义位选
sbit wei2=P2^7;
uchar aa;uchar temp;uchar shi;uchar ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码真值表
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar shi,uchar ge) //显示子程序
{
shi=temp/10;
ge=temp%10; //分离个位和十位
wei1=0; //送位选
P0=table[shi];//使用动态扫描的方法实现数码管显示
delay(1);
wei1=1; //关闭位选
wei2=0;
P0=table[ge];
delay(1);
wei2=1;
}
void init() //初始化程序
{
aa=0;
temp=0;
TMOD=0x01; //使用定时器T0的方式1
TH0=0x4c;
TL0=0x00; //定时50ms中断一次
EA=1; //终端总允许
ET0=1; //允许定时器T0中断
}
void timer0() interrupt 1
{
TH0=0x4c; //重装初值
TL0=0x00;
aa++; //中断计数值加1
if(aa==20) //中断20次后,定时时间为20*50ms=1000ms=1s
{
aa=0;
temp++;
if(temp==60) //秒表到达60s后回零
{
temp=0;
}
}
}
void main()
{
init(); //调用初始化子程序
while(1)
{
if(key1==0) //检验启动按钮是否按下
{
delay(10);//延时去抖动
if(key1==0);//再次检测启动按钮
{
while(!key1);//松手检测
TR0=1; //启动定时器开始工作
}
}
if(key2==0) //
{
delay(10);
if(key2==0)
{
while(!key2);
TR0=0;
}
}
if(key3=0)
{
delay(10);
if(key3==0)
{
while(!key3);
temp=0;
shi=0;
ge=0;
TR
文档评论(0)