用的单片机控制四位数显示从左至右慢速动态扫描显示数字1357和2468然后 在从左至右快速动态扫描显示字符Abcd和EFHP
2条回答 默认 最新
- CodeBytes 2023-02-21 11:24关注
这个问题的回答需要根据具体的单片机类型和开发环境来确定。以下提供一种可能的解决方案,假设使用的是AT89S52单片机和Keil C51开发环境。
首先,需要编写显示函数,可以根据所需的扫描速度和扫描方式(慢速动态扫描和快速动态扫描)进行调整。以下是示例代码:
#include <reg52.h> // 数码管控制位定义 sbit LED_COM1 = P2^4; sbit LED_COM2 = P2^5; sbit LED_COM3 = P2^6; sbit LED_COM4 = P2^7; // 数码管段码定义 unsigned char LED_NUM[10] = { 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f // 9 }; unsigned char LED_CHAR[4] = { 0x39, // A 0x79, // b 0x71, // c 0x3d // d }; // 定义显示数据数组 unsigned char disp_data[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; // 定义扫描索引 unsigned char scan_index = 0; // 定义扫描计数器 unsigned int scan_counter = 0; // 定义扫描速度控制参数 unsigned char scan_speed = 10; // 10ms/次 // 显示函数 void LED_Display(void) { // 数码管动态扫描控制 switch (scan_index) { case 0: LED_COM1 = 1; LED_COM2 = 0; LED_COM3 = 0; LED_COM4 = 0; break; case 1: LED_COM1 = 0; LED_COM2 = 1; LED_COM3 = 0; LED_COM4 = 0; break; case 2: LED_COM1 = 0; LED_COM2 = 0; LED_COM3 = 1; LED_COM4 = 0; break; case 3: LED_COM1 = 0; LED_COM2 = 0; LED_COM3 = 0; LED_COM4 = 1; break; default: break; } // 数码管数据段输出 P0 = disp_data[scan_index]; // 扫描计数器更新 scan_counter++;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改