|
#include <AT89X52.h>
#include <intrins.h>
sbit sbF1 = P2 ^ 0; //不進行放大處理
sbit sbF20 = P2 ^ 1; //放大20倍
sbit sbF30 = P2 ^ 2; //放大30倍
sbit sbF50 = P2 ^ 3; //放大50倍
sbit sbDIN = P3 ^ 0; //MAX7219的數據引腳
sbit sbLOAD = P3 ^ 1; //MAX7219的控制引腳
sbit sbCLK = P3 ^ 2; //MAX7219的時鐘引腳
//顯示緩沖區定義
unsigned char Disp_Buffer[8]= //MAX7219的輸出緩沖
{
0,0,0,0,0,0,0,0
};
unsigned char Disp_Buffer1[8]= //MAX7219的輸出緩沖
{
0,0,0,0,0,0,0,1
};
unsigned char Disp_Buffer20[8]= //MAX7219的輸出緩沖
{
0,0,0,0,0,0,2,0
};
unsigned char Disp_Buffer30[8]= //MAX7219的輸出緩沖
{
0,0,0,0,0,0,3,0
};
unsigned char Disp_Buffer50[8]= //MAX7219的輸出緩沖
{
0,0,0,0,0,0,5,0
};
void DelayMS(unsigned int ms) //毫秒級延時函數
{
unsigned int i,j;
for( i=0;i<ms;i++)
for(j=0;j<1141;j++);
}
//寫MAX7219函數,Addr為MAX7219的內部寄存器地址,Dat為待寫入的數據
void Write7219(unsigned char Addr,unsigned char Dat)
{
unsigned char i;
sbLOAD = 0;
for(i=0;i<8;i++) //先送出8位地址
{
sbCLK = 0; //時鐘拉低
Addr <<= 1; //移位送出地址
sbDIN = CY; //送出數據
sbCLK = 1; //時鐘上升沿
_nop_();
_nop_();
sbCLK = 0;
}
for(i=0;i<8;i++) //再送出8位數據
{
sbCLK = 0;
Dat <<= 1; //移位送出數據
sbDIN = CY;
sbCLK = 1;
_nop_();
_nop_();
sbCLK = 0;
}
sbLOAD = 1;
}
//MAX7129的初始化函數
void Initialise7219()
{
Write7219(0x09,0xff); //編碼模式寄存器
Write7219(0x0a,0x07); //顯示亮度控制
Write7219(0x0b,0x07); //掃描控制
Write7219(0x0c,0x01); //關閉模式控制寄存器設置
}
void Wobbling () //延時程序防止按鍵抖動
{
unsigned int i;
for(i=0;i<1000;i++);
}
void main()
{
unsigned char i;
Initialise7219(); //首先初始化MAX7129
DelayMS(1); //延時1毫秒
for(i=0;i<8;i++)
{
Write7219(i+1,Disp_Buffer[i]); //將顯示緩沖區內的數據循環送出
}
P1 = 0x00; //初始化端口
P2 = 0xFF;
P1 = 0x11; //再不按鍵的情況下默認為不進行放大處理
while(1)
{
if (sbF1 == 0) //判斷是否按下按鍵
{
Wobbling(); //時間延時程序,軟件防抖動
if( sbF1 == 0) //確定按下按鍵
{
P1 = 0x11; //放大1倍
for(i=0;i<8;i++)
{
Write7219(i+1,Disp_Buffer1[i]); //顯示放大1倍
}
}
}
if(sbF20 == 0) //判斷是否按下按鍵
{
Wobbling(); //時間延時程序,軟件防抖動
if(sbF20 == 0) //確定按下按鍵
{
P1 = 0x22; //放大20倍
for(i=0;i<8;i++)
{
Write7219(i+1,Disp_Buffer20[i]); //顯示放大20倍
}
}
}
if(sbF30 == 0) //判斷是否按下按鍵
{
Wobbling(); //時間延時程序,軟件防抖動
if(sbF30 == 0) //確定按下按鍵
{
P1 = 0x44; //放大30倍
for(i=0;i<8;i++)
{
Write7219(i+1,Disp_Buffer30[i]); //顯示放大20倍
}
}
}
if(sbF50 == 0) //判斷是否按下按鍵
{
Wobbling(); //時間延時程序,軟件防抖動
if(sbF50 == 0)//確定按下按鍵
{
P1=0x88; //放大50倍
for(i=0;i<8;i++)
{
Write7219(i+1,Disp_Buffer50[i]); //顯示放大20倍
}
}
}
}
}
|
|