前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51单片机八路抢答器proteus仿真

51单片机八路抢答器proteus仿真

作者头像
全栈程序员站长
发布2022-11-01 15:58:12
4160
发布2022-11-01 15:58:12
举报

51单片机八路抢答器

由于51单片机小板,按键比较少,还有一些功能上的缺陷,所以说无法完成八路抢答器,所以我们用proteus仿真,代码与实验结果如下:

/******************************** Function: 八路抢答器 Date: Sep 20,2017 By:Third Group Bolanche L **************************/ #include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit Start=P3^7; sbit Indecator=P3^6; //指示灯 sbit Interrupt=P3^3; //中断1 sbit KEY1=P2^0; //第一位LED sbit KEY2=P2^1; sbit KEY3=P2^2; sbit KEY4=P2^3; sbit KEY5=P2^4; sbit KEY6=P2^5; sbit KEY7=P2^6; sbit KEY8=P2^7; uchar n; //声明全局无符号字符变量n //延时毫秒 void delayms(uint c) { uchar a,b; for(;c>0;c–) for(a=142;a>0;a–) for(b=2;b>0;b–); } //数码管显示 void SMG_dis(uchar m) { P0=table[m] ; //delayms(20); } //LED亮 void LED_DIS(uchar i) { P1 |=(1<<(i-1)); //将第i个LED点亮 } //按键扫描,返回值为被按下的那个按键,每按下一个按键触发一次中断 char KEY_Scan(void) { if(KEY1==0) { delayms(20); //消抖 if(KEY1==0) { Interrupt=1; //中断1口赋高电平 delayms(20); Interrupt=0; n=1; } } if(KEY2==0) { delayms(20); if(KEY2==0) { Interrupt=1; delayms(20); Interrupt=0; n=2; } } if(KEY3==0) { delayms(20); if(KEY3==0) { Interrupt=1; delayms(20); Interrupt=0; n=3; } } if(KEY4==0) { delayms(20); if(KEY4==0) { Interrupt=1; delayms(20); Interrupt=0; n = 4; } } if(KEY5==0) { delayms(20); if(KEY5==0) { Interrupt=1; delayms(20); Interrupt=0; n = 5; } } if(KEY6==0) { delayms(20); if(KEY6==0) { Interrupt=1; delayms(20); Interrupt=0; n = 6; } } if(KEY7==0) { delayms(20); if(KEY7==0) { Interrupt=1; delayms(20); Interrupt=0; n = 7; } } if(KEY8==0) { delayms(20); if(KEY8==0) { Interrupt=1; delayms(20); Interrupt=0; n = 8; } } return n; } void INT_1() interrupt 2 { EX1=0; delayms(20); //消抖 EX1=1; LED_DIS(n); SMG_dis(n); Indecator=0; delayms(20); P1=0x00; //关闭抢答人指示灯 } void main() { EX1=1; //开启外部中断1 IT1=1; //开启下降沿触发 EA=1; //开启总中断 P1=0x00; // 点亮第一位小灯 P0=0x00; // 关闭数码管 Indecator=0; //关闭指示灯 Interrupt=1; while(1) { if(Start==0) { delayms(20); if(Start==0) Indecator=1; //主持人按下开始按键,指示灯亮 } n=KEY_Scan();//扫描哪一个按键被按下,并触发中断 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179828.html原文链接:https://javaforall.cn

...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档