m0_51367278 2023-02-21 11:19 采纳率: 80%
浏览 45
已结题

用单片机控制4位数码管

用的单片机控制四位数显示从左至右慢速动态扫描显示数字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++;
        
      
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 2月21日

悬赏问题

  • ¥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 悬赏!微信开发者工具报错,求帮改