版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
例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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四下数学运算律复习课件
- 《大自然的文字》教学课件张建昊
- 聚酯薄膜绝缘胶带全球前18强生产商排名及市场份额(by QYResearch)
- 广西百色市保德县2027届物理九年级第一学期期末达标测试试题含解析
- 2027届河北省沧州市沧县九年级物理第一学期期末联考试题含解析
- 急性心肌梗死患者的护理措施
- 江苏省泰州市高港区2027届九上化学期中经典试题含解析
- 基本笔画考查题及答案详解
- (新)工行报警设备租赁服务合同书
- (新)建筑工程机械施工合同协议
- 2026及未来5年中国工业脱水机行业发展研究报告
- 建筑施工消防应急演练方案
- 2026年成都市中考物理试卷(含答案)
- 2026上半年湖北省武汉市东湖高新区工程系列专业技术职务水平能力测试(环境保护)自测试题及答案解析
- 2026年慢阻肺基层健康管理培训考核试题及答案
- 2026年ICA对外汉语教师资格证考试笔试试题及答案
- 消防安全四懂四会知识培训
- 幼儿园德育工作指南(2025版)
- 2025年成都市第八人民医院招聘真题
- 2026年反兴奋剂知识自测题库及答案详解1套
- 2026年校园传染病科学预防与健康守护指南
评论
0/150
提交评论