标题:
单片机6位数码管显示程序
[打印本页]
作者:
HI-XM
时间:
2022-1-14 21:15
标题:
单片机6位数码管显示程序
#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;
}
作者:
HI-XM
时间:
2022-3-16 20:16
前面的程序有问题,附件文件好了。
LED DISPLAY (20220316).zip
2022-3-16 20:15 上传
点击文件名下载附件
下载积分: 黑币 -5
65.17 KB, 下载次数: 6, 下载积分: 黑币 -5
作者:
HI-XM
时间:
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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1