// 头文件
#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 |