中断控制数码管显示程序解释.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断控制数码管显示程序解释

简易数码秒表设计示例程序 #includereg51.h 51单片机寄存器定义的头文件 unsigned char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 数码管显示0~9的断码表 unsigned char int_time; 定义无符号字符变量,中断次数 unsigned char second; 定义秒 void delay(void) 延时函数 { unsigned char i; for(i=0;i200;i++) 延时时间,for循环语句 ; } * 秒显示函数 void Display_Second(unsigned char k) 定义入口参数 { P2=0xfd; P2P2.1引脚低电平,DS2亮 P0=Tab[k/10]; 显示十位 delay(); 调用延时函数 P2=0xfe; P2P2.0引脚低电平,DS1亮 P0=Tab[k%10]; 显示个位 delay(); P2=0xff; P2关闭所有数码管 } * 主函数 void main(void) { TMOD=0X01; 工作方式控制寄存器TMOD使用 定时器T0工作方式1 TH0=(65536-46083)/256; 将定时时间设为50ms TL0=(65536-46083)%256; 存入寄存器TH0和TL0 EA=1; 开启总中断 ET0=1; 定时器T0中断允许 TR0=1; 启动定时器T0开始运行 int_time=0; 中断次数初始化 second=0; 秒初始化 while(1) 无限循环 { Display_Second(second); 调用秒的显示子程序 } } * 实际计数值= = =46083 * void Time0_serve(void)interrupt 1 using 1 定时器T0的中断服务函数,T0的中断编号为1,使用第一组工作寄存器 { TR0=0; 关闭定时器T0 int_time ++; 每来一次中断,中断次数自加1 if(int_time==20) 20次中断,即1s进行一次时间控制 定时器T0的中断服务程序 * PSW.4 (RS1) PSW.3 (RS0) 当前使用的工作寄存器区R0 - R7 0 0 0区 (00 - 07H) 0 1 1区 (08 - 0FH) 1 0 2区 (10 - 17H) 1 1 3区 (18 - 1FH) CPU通过对PSW中的D4、D3位内容的修改,就能任选一个工作寄存器区,例如: SETB PSW.3 CLR PSW.4 ;选定第1区 SETB PSW.4 CLR PSW.3 ;选定第2区 SETB PSW.3 SETB PSW.4 ;选定第3区 * { int_time=0; 中断次数清0 second ++; 秒加1 if(second==60) if语句 second=0; 等于60就返回 } TH0=(65536-46083)/256; 重新给计数器T0赋初值 TL0=(65536-46083)/256; TR0=1; 启动定时器T0 } * 使用定时器T0的中断控制数码管倒计数显示 * 自主思考: 比较P14

文档评论(0)

rovend + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档