综合电子设计与实践-赵云伟课件例8:秒表学习资料_第1页
综合电子设计与实践-赵云伟课件例8:秒表学习资料_第2页
综合电子设计与实践-赵云伟课件例8:秒表学习资料_第3页
综合电子设计与实践-赵云伟课件例8:秒表学习资料_第4页
综合电子设计与实践-赵云伟课件例8:秒表学习资料_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

例8:秒表设计内容:

用6个数码管组成一个秒表,可以以1S为时间间隔,可从0计时到999999。设计思路:使用定时器T1,每1ms产生一次中断,每次产生中断,就要自动跳到中断子程序去执行,所以中断子程序要完成这样的功能:每隔1S,将数码管要显示的数据,赋给P0口,用P0口控制6个数码管去显示的内容,故中断子程序是本程序的核心内容。设计步骤:1、因为数码管要显示0-9,故定义数组number[]uint8number[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};number[]中存放的是0-9的段选码,且P0=number[0],数码管显示的是0、P0=number[1],数码管显示的是1,以此类推。规律:数组的下标是什么,数码管就显示什么。2、定义数组a[6],让a[0]-a[5]分别存放6个数码管要显示的数据的各位。例如:计数到321时,也即数码管要显示321,则应让a[0]=1,a[1]=2,a[2]=3。将这些值分别作为number[]数组的下标,例如:number[a[0]],也即number[1]=0XF9,将其赋给P0口,同时打开相应数码管,就会使相应数码管显示数字1。通过refresh函数,将数组a[6]的6个元素分别通过相应的数码管“同时”进行显示。3、定时器初始化,分三步:设置TMOD值;设定初始值(1ms);打开定时器4、中断初始化:打开T1中断;打开总中断。5、编写中断子程序6、编写refresh函数,以便让数码管同时(看上去)显示#include<reg52.h>typedefunsignedcharuint8;typedefunsignedintuint16;typedefunsignedlonguint32;codeuint8number[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//将number[]中数值赋给P0口时,可让数码管对应显示{0,1,2,3,4,5,6,7,8,9}uint8a[6];//定义一个数组,使a[0]显示第一位数码管的值,a[1]显示第二位数码管的值,以此类推

uint16counter=0;sbitA0=P1^0;sbitA1=P1^1;sbitA2=P1^2;sbitE3=P1^3;sbitENLED=P1^4;voidtimer1_init()//定时器1初始化子程序{ TMOD|=0X10;//通过按位或、按位与的方法设置TMOD中T1的值,不改变T0 TMOD&=0XDF;

TH1=0XFC;//定时器1初始化,设置初始值,定时1ms TL1=0X67;

TR1=1;//打开定时器1}voidint_init()//中断初始化(initialize){ ET1=1;//打开T1的中断允许位,可进行位操作

EA=1;//打开中断总控制位

}voidrefresh(){staticuint8j=0;//static为静态变量,是属于局部变量的一种,但只有第一次赋值有效

switch(j){case0:A2=0;A1=0;A0=0;j++;P0=number[a[0]];break;//打开第一个数码管,让其显示个位

case1:A2=0;A1=0;A0=1;j++;P0=number[a[1]];break;//打开第二个数码管,让其显示十位

case2:A2=0;A1=1;A0=0;j++;P0=number[a[2]];break;//打开第三个数码管,让其显示百位

case3:A2=0;A1=1;A0=1;j++;P0=number[a[3]];break;//打开第四个数码管,让其显示千位

case4:A2=1;A1=0;A0=0;j++;P0=number[a[4]];break;//打开第五个数码管,让其显示万位

case5:A2=1;A1=0;A0=1;j=0;P0=number[a[5]];break;//打开第六个数码管,让其显示十万位

default:break;}}main(){

ENLED=0;//设置74138的使能端,从而使其正常工作

E3=1;

timer1_init();//调用子函数,对定时器1初始化

int_init();//调用子函数,进行中断初始化

while(1);//耗时,从而可以每1ms中断一次}voidinterrupt_timer1()interrupt3//中断函数interrupt3,3是中断标号{ staticuint32sec=0;//定义计数数值sec并初始化

TH1=0XFC;//设置定时器初值

TL1=0X67; counter++;//定时器每1ms产生一次中断,counter加1

if(counter==1000)//当1S时

{ sec++; counter=0; a[0]=sec%10;//a[0]保存sec的个位

a[1]=sec/10%10;//a[1]保存sec的十位

a[2]=sec/100%10;//a[2]保存sec的百位

a[3]=sec/1000%10;//a[3]保存sec的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论