找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1826|回复: 2
打印 上一主题 下一主题
收起左侧

单片机6位数码管显示程序

[复制链接]
跳转到指定楼层
楼主
ID:114509 发表于 2022-1-14 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define GPIO_DIG    P0 //数码管 P0 端口

//位定义
sbit DU = P2^6;  //段选控制
sbit WU = P2^7;  //位选控制

unsigned char code ledDX[]=
{
        //数码管段码
        0x3f, // 0
        0x06, // 1
        0x5b, // 2
        0x4f, // 3
        0x66, // 4
        0x6d, // 5
        0x7d, // 6
        0x07, // 7
        0x7f, // 8
        0x6f, // 9
        0x77, // A
        0x7c, // B
        0x39, // C
        0x5e, // D
        0x79, // E
        0x71, // F
        0x76, // H
        0x38, // L
        0x37, // n
        0x3E, // u
        0x73, // P
        0x5C, // O
        0x40, // -
        0x00 // 熄灭
};

unsigned char code ledWX[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//数码管位选

void LED_display(unsigned char dx,unsigned char wx)
{
        GPIO_DIG = ledWX[wx];//送位码
        WU = 1;
        WU = 0;//锁住位码
        
        GPIO_DIG = ledDX[dx];//送段码
        DU = 1;
        DU = 0;//锁住段码
        
        delay_ms(2);//延时一会
        
        GPIO_DIG = 0x00;//消影
        DU = 1;
        DU = 0;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:114509 发表于 2022-3-16 20:16 | 只看该作者
前面的程序有问题,附件文件好了。

LED DISPLAY (20220316).zip

65.17 KB, 下载次数: 6, 下载积分: 黑币 -5

回复

使用道具 举报

板凳
ID:114509 发表于 2022-3-16 20:17 | 只看该作者
// 头文件
#include "LEDdisplay.h"

ulong parm = 202203;

//数据暂存区
uchar LED_BuF[]={8,8,8,8,8,8};
//位选
uchar code LED_WX[]=
{
        0xfe,0xfd,0xfb,0xf7,0xef,0xdf
};
//段选
uchar code LED_DX[]=                                
{
        0x3f,0x06,0x5b,0x4f,0x66,0x6d, // 0,1,2,3,4,5
        0x7d,0x07,0x7f,0x6f,0x77,0x7c, // 6,7,8,9,A,B
        0x39,0x5e,0x79,0x71,0x76,0x38, // C,D,E,F,H,L
        0x37,0x3E,0x73,0x5C,0x40,0x00  // n,u,P,O,-,灭
};
//显示服务函数
void dis_Service()
{
        LED_BuF[0] = parm/100000%10;
        LED_BuF[1] = parm/10000%10;
        LED_BuF[2] = parm/1000%10;
        LED_BuF[3] = parm/100%10;
        LED_BuF[4] = parm/10%10;
        LED_BuF[5] = parm%10;
}
//LED 显示
void LED_display()
{
        uchar i;
       
        switch (i)
        {
                case 0:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[0]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[0];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 1:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[1]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[1];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 2:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[2]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[2];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 3:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[3]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[3];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 4:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[4]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[4];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 5:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[5]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[5];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i++;
                break;
               
                case 6:
                Port_DX = 1;// LE置1 送段码到 P0端口
                GPIO_P0 = LED_DX[LED_BuF[6]];
                Port_DX = 0;// LE锁存 保持数码管端口的数据
                GPIO_P0 = 0x00;//消影 复位P0端口
               
                Port_WX = 1;// LE置1 送位码,点亮数码管
                GPIO_P0 = LED_WX[6];
                Port_WX = 0;// LE锁存 保持点亮数码管
                GPIO_P0 = 0x00;//消影 复位P0端口
                //delay_ms(1);//延时1ms
                i=0;
                break;
                default:break;//退出switch循环
        }
        dis_Service();
}


#ifndef __LEDdisplay_H__
#define __LEDdisplay_H__

#include <reg52.h>
#include "delay.h"

//IO口定义
#define GPIO_P0  P0
#define GPIO_P1  P1
#define GPIO_P2  P2
#define GPIO_P3  P3

//位定义
sbit Port_DX = P2^6;  //段选
sbit Port_WX = P2^7;  //位选

void LED_display();//LED 显示
void dis_Service();//显示服务函数

#endif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表