#include <reg52.h>
#include <intrins.h>
#define SXLed_P P0//数码管数据传输
unsigned char code Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6F,0x40,0x80,0x00};//共阴极数码管0-9.-灭
void Init(void);//变量初始化 函数
void T0_Init(void);//定时器T0初始化函数
void SXLed (unsigned char location,unsigned char Num);//数码管显示函数
unsigned int i;
unsigned char SX[7];//数码管内容暂存器
sbit SXLed_W=P2^7;//数码管位选控制位
sbit SXLed_D=P2^6;//数码管段选控制位
void main(void)
{
Init(); //变量初始化
T0_Init(); //定时器T0初始化
P1=0x00; //开启Led灯
while(1);
}
void Init(void)
{
i=0;
SX[0]=11;
SX[1]=2;
SX[2]=3;
SX[3]=4;
SX[4]=5;
SX[5]=6;
SX[6]=7;
SX[7]=8;
}
void T0_Init(void)
{
TMOD|=0x01; //定时器T0工作在16位定时模式
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1; //启动定时器
TH0=0xee; //定时5毫秒高四位初值重装
TL0=0x00; //定时5毫秒高四位初值
}
void T0_Timer(void) interrupt 1
{
TH0=0xee; //定时5毫秒高四位初值重装
TL0=0x00; //定时5毫秒高四位初值重装
SXLed(1,SX[7]);
i++;
if(!(i%100))
{
P1=~P1;
}
}
void SXLed (unsigned char location,unsigned char Num)//location显示位置,num显示数字
{
SXLed_P=0xff; //消影
SXLed_W=1; //打开位选锁存器
SXLed_P=~(0x80>>location); //送位码
SXLed_W=0; //锁存位选数据
SXLed_P=0xff;
SXLed_D=1; //打开段选锁存器
SXLed_P=Number[Num]; //送段码
SXLed_D=0; //锁存段选数据
}
SXLed(1,SX[7]);这里改成SXLed(1,8)就可以,SXLed(1,SX[7]);这样就会显示乱码,不是传的是数组的一个吗?
|