#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]);這樣就會顯示亂碼,不是傳的是數組的一個嗎?
|