启动秒表走时.PPT

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

任务实施: 1、搭建硬件电路 电路图如下: 2、编写软件程序 #include reg51.h #define DCOUNT 2 #define portled_s P1 #define portled_b P2 #define keyport P3 #define uchar unsigned char uchar data wcnt,timcnt,second; //7 wcnt:显示位置, //timcn:10ms中断次数,second:秒数 bit keytreated,down; //8 keyteated:键按下已处理,down:键按下过 uchar code led[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //9 笔型码表 uchar code ledctrl[]={0x0fe,0x0fd};//10 数码管显示控制码表 void display(uchar); //11 说明显示函数display void key(void); //12 说明键盘处理函数key (2)程序代码 2、编写软件程序 void main(void) //13 main函数 { second=0; //14 秒计数赋初值0 timcnt=0; //15 10ms中断计数赋初值0 wcnt=0; //16 数码管显示位置计数器赋初值0 keytreated=0; //17 按键未处理 down=0; //18 无键按下 TMOD=0x11; //19 T1:定时方式1,T0:定时方式1 TL0=(65536-9216)%256; //20 T0计数器赋初值:10ms TH0=(65536-9216)/256; //21 TL1=(65536-9216)%256; //22 T1计数器赋初值:10ms TH1=(65536-9216)/256; //23 ET0=1; //24 开T0中断 ET1=1; //25 开T1中断 PT1=1; //26 T1中断采用高优先级 EA=1; //27 开全局中断 TR0=1; //28 启动T0 while(1) //29 while死循环,30句为循环体 { PCON=PCON|0X01; } //30 睡眠CPU } //31 main函数结束 2、编写软件程序 定时中断T1服务程序 功能:对秒进行计数,T1的启动与停止受控制于键盘操作 void tim1() interrupt 3 using 1 //32 { TL1=(65536-9216)%256; //33 T1重置计数初值:10ms TH1=(65536-9216)/256; //34 timcnt++; //35 10ms中断次数计数值加1 if(timcnt=100) //36 若计满1秒,则进行37~40句处理 { timcnt=0; //37 10ms中断次数计数值回0 second++; //38 秒计数加1 if(second=60) second=0; //39 若计满1分,则秒回0 } //40 计满1秒处理结束 } //41 T1中断服务结束 2、编写软件程序 定时中断T0服务程序 功能:键盘处理,显示处理 void tim0() interrupt 1 using 2 //42 { TL0=(65536-9216)%256; //43 T0重置计数初值:10ms TH0=(65536-9216)/256; //44 key(); //45 调用key函数进行键盘处理 display(second); //46 调用display函数显示秒数 } //47 T0中断服务结束 2、编写软件程序 显示子程序 void display(uchar time) //48 { portled_s=0; //49 段选口输出熄灭数码管的显示码 portled_b=ledctrl[wcnt]; //50 位选口输出wcnt号管点亮的控制码 if(wcnt) //51 判断显示位置 portled_s=led[time/10]; //52 非0号管,则段选口输出秒十位的笔型码 el

文档评论(0)

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

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

1亿VIP精品文档

相关文档