基于AT89S52的八路抢答器C语言源程序.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于AT89S52的八路抢答器C语言源程序

C语言源程序 #includereg52.h #define unchar unsigned char #define unit unsigned int #define Data_port P0 //数码管数据口 #define Bit_sel_port P1 //数码管位选口 #define Key_port P2 //抢答按键输入口 sbit Bee=P3.7; //蜂鸣器控制引脚 unit timer_out=60; //定时60s unit Count=0; unit single=0; //个位 unit decade=6; //十位 unit n; unit i; unchar start_flag=0; //启动抢答标志 unchar ans_flag=0; //已抢答标志 unit seg_tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //七段数码管字形表 void Delay(i) //延迟函数 { for(;i0;i--); } void Display_time() //显示抢答时间 { Bit_sel_port=0x01; Data_port=seg_tab[decade]; Delay(200); Bit_sel_port=0x02; Data_port=seg_tab[single]; Delay(200); } void Display_num_time() //显示抢答组编号和时间 { Bit_sel_port=0x01; Data_port=seg_tab[decade]; Delay(200); Bit_sel_port=0x02; Data_port=seg-tab[single]; Delay(200); Bit_sel_port=0x04; Data_port=seg_tab[n]; Delay(200); } main() { EX0=1; //开外部中断INT0 IT0=1; //外部中断方式为下降沿 TMOD=0x01; //定时/计时器0工作与模式1 TH0=0xd8; TL0=0xef; ET0=1; //开定时/计数器0中断,定时20ms Bee=0; //蜂鸣器停止 EA=1; //开关中断 while(1) { if(star_flag==0) //抢答未开始 { if(Key_port!=0xFF) { Bee=1; //蜂鸣器启动,抢答违规处理 while(1); //进入死循环,按复位键重新启动 } } else //抢答开始 { if(ans_flag!=1) //无人抢答,显示时间 Dislay_time(); else //显示时间和抢答组编号 Delay_num_time(); } } void Interrupt0() interrupt0 { Bee=1; //提示开始抢答 Delay(200); Bee=0; TR0=1; //启动抢答后使能定时器 start_flag=1; //启动抢答标志置位 } void Timer0() interrupt1 { TH0=0xd8; TL0=0xef; Count++; if(Count==50) { Count=0; timer_out--; } if(timer_out!=0Key_port==0xff) //如果时间未到且无抢答键按下 { decade=timer_out/10; //显示当前剩余时间 single=timer_out%10; ans_flag=0; } if(time_o

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档