资源描述
实验报告
系别信工系专业 班级 姓名 学号
课题名称:
简易秒表设计
实验目的:
1、熟悉Keil C51软件的使用方法及proteus仿真软件的使用;
2、综合运用所学的理论知识(数码管、按键),通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
3、通过本次试验,增强自己的动手能力.认识单片机在日常生活中的应用的广泛性,实用性。
设计要求:
制作简易秒表,用三个按键分别实现秒表的启动、停止与复位,利用两位共阴级的数码管显示时间.
设计思路:
硬件设计:数码管部分采用2位共阴极的数码管,在P0 接上拉电阻,公共端低电平扫描。按键电路部分,将按键一侧与单片机任一 I/O 相连。
软件设计:模块化思想,使用定时器T0的工作方式1,编写显示子程序,延时子程序,初始化程序,主程序设计时注意按键消抖。
原理图:
源代码:
# include〈 reg51.h>
#define uint unsigned int
# define uchar unsigned char
sbit key1=P3A0;//定义"启动”按钮
sbit key2=P3A1;//定义”停止”按钮
sbit key3=P3A2;//定义”复位”按钮
sbit wei1=P2A6;//定义位选
sbit wei2=P2A7;
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=0x;//定时 50ms 中断一次
EA=1;〃终端总允许
ET0=1;〃允许定时器T0中断
}
void timer0() interrupt 1
{
TH0=0x4c;〃重装初值
TL0=0x;
aa++;//中断计数值加1
if ( aa==20 )//中断 20 次后,定时时间为 20 * 50ms=10ms=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;
TR0=0;
}
}
display(shi,ge);
}
}
实验结果:
在proteus中编写程序,编译调试后生成hex文件,将hex文件加到仿真电路中,通过对简易秒表进行演示,达到设计要求。。
实验心、得:
在keil软件中,即使程序不会需要模仿别人的时候,也必须通过自身再打一遍程序,在多次的通过打印过程,渐渐记住并理解程序,也有助于我们以后的程序创新.
内容:实验题目;实验目的;实验原理;实验步骤;数据处理;结果分析
年 月 日分数
展开阅读全文