1.按下复位键,数码管从左到右显示自己的学号后三位
2.按下一个独立按键,数码管间隔一位显示1357。
3.按下一个独立按键,数码管显示最右边数字加一,且蜂鸣器响起。若该到9则清零。
动态数码管与独立按键
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- 社区专家-Monster-XH 2023-02-21 15:13关注
基于Monster 组和GPT的调写:
#include <reg52.h> sbit btn_reset = P1^0; // 复位按键 sbit btn_display = P1^1; // 显示按键 sbit btn_increment = P1^2; // 数字增加按键 sbit buzzer = P2^3; // 蜂鸣器 unsigned char seg_code[10] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9 }; void delay(unsigned int time) { while(time--); } void display(unsigned char digit) { P0 = seg_code[digit]; delay(100); P0 = 0x00; } void main() { unsigned char num = 0; while(1) { if (btn_reset == 0) { // 复位按键按下 display(2); // 显示学号后三位 display(1); display(5); delay(1000); P0 = 0x00; } else if (btn_display == 0) { // 显示按键按下 display(1); // 显示 1 3 5 7 delay(100); P0 = 0x00; delay(100); display(3); delay(100); P0 = 0x00; delay(100); display(5); delay(100); P0 = 0x00; delay(100); display(7); delay(100); P0 = 0x00; } else if (btn_increment == 0) { // 数字增加按键按下 num++; if (num == 10) { // 如果数字到达 10,则清零 num = 0; } display(num); buzzer = 1; // 蜂鸣器响起 delay(100); buzzer = 0; delay(1000); P0 = 0x00; } } }
用 P0 口控制数码管的显示,使用 P1 口控制按键的输入,使用 P2 口控制蜂鸣器的输出。
在主函数中,使用一个无限循环来不断检测按键的状态。如果复位按键按下,则显示学号后三位;如果显示按键按下,则显示 1 3 5 7;如果数字增加按键按下,则数字加一并显示,同时蜂鸣器响起,如果数字到达 10,则清零。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?