软件设计
#include
#define uchar unsigned char #define uint unsigned int void delay(unsigned int); void s_delay(void);
void delay10ms(unsigned char);
void write7279(unsigned char, unsigned char); void send_byte(unsigned char);
uchar a,b, j, k; uint i,tmr; //变量及IO口定义 sbit cs=P2^2; sbit clk=P2^1; sbit dat=P2^0; sbit key=P3^2;
//****** HD7279A指令 ******
#define CMD_RESET 0xa4 //7279复位指令 #define CMD_TEST 0xbf //7279灯测控指令 #define DECODE1 0xc8 //方式1译码 //主程序
/*void delay(void) //延时0.2秒子程序 {
unsigned char i,j,k; //定义3个无符号字符型数据。 for(i=20;i>0;i--) //作循环延时 for(j=200;j>0;j--)
6
for(k=248;k>0;k--);
}*/ void main() {
PX1=1; //设定外部中断1为最高优先级
IT1=1; //外部中断触发方式 EA=1; //开总中断 EX1=1; //外部中断 cs=1;
delay(0x100);
send_byte(CMD_RESET); //7279复位指令发送 k=0x01;
while(1) {
delay(10000);
j=_crol_(k,1); k=j; P0=j;
for(i=0;i<15;i++)
{ }
write7279(DECODE1,i); //译码方式1 delay(500000); delay(500000);
}
}
void delay10ms()
{
7
for(a=100;a>0;a--)
for(b=225;b>0;b--);
}
void delay(uint t) { uint i;
for(i=0;i } void send_byte(uchar out_byte) { uchar i; cs=0; delay10ms(); for(i=0;i<8;i++) //发送命令,高位在前数据到7279中 { if(out_byte&0x80) //高位在前 { dat=1; } else { dat=0; } s_delay(); clk=1; //发生脉冲 s_delay(); clk=0; s_delay(); 8 一个时钟脉冲,送一位 out_byte<<=1; //左移一位 } dat=0; delay(0x04); cs=1; } void s_delay(void) { uchar t; t=0; } //向7279中写入带数据的指令 void write7279(uchar out_cmd, uchar out_byte) //送数据 { uint i; cs=0; delay(0x04); for(i=0;i<8;i++) { if(out_cmd&0x80) { dat=1; } else { dat=0; } s_delay(); 9 先发送指令,再发 clk=1; s_delay(); clk=0; s_delay(); out_cmd<<=1; } s_delay(); for(i=0;i<8;i++) { if(out_byte&0x80) { dat=1; } else { dat=0; } s_delay(); clk=1; s_delay(); clk=0; s_delay(); out_byte<<=1; } dat=0; delay(0x04); cs=1; delay(0x04); } 10