|
#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倍
}
}
}
}
}
|
|