点阵原理就是一个LED的两端都接IO,当正极为1,负极为0时点亮相应的LED。
下面是8×8的LED点阵程序,参考一下吧
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TAB[]={
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0x00,0x82,0xFE,0x82,0x80,0xC0,0x00,0x00,
0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00,
0x02,0x0E,0x72,0x80,0x70,0x0E,0x02,0x00,
0x00,0x82,0xFE,0x92,0xBA,0x82,0xC6,0x00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
}
/*delay(uint t)
{
uint a,b
for(a=0a<ta++)
for(b=0b<110b++)
} */
void main(void)
{
uint i,j,xx
uchar bittemp=0x01
while(1)
{
for(i=0i<40i++)
{
for(xx=0xx<500xx++)
{
bittemp=0x80
for(j=0j<8j++)
{
P2=0x00 //消隐
P0= ~TAB[i+8-j]
P2 = bittemp
bittemp >>= 1
}
}
}
}
}
这还不简单!看大神帮你解答。/****显示函数****/
void display(void)
{
unsigned char i
count=0x00
gate=1
for(i=1i<=31i+=2)
{
send8bit(i+32)//由于使用移位寄存74hc595,先发送一列的下半部分
send8bit(i-1+32) //后发送一列的上半部分,第2个字
send8bit(i) //由于使用移位寄存74hc595,先发送一列的下半部分
send8bit(i-1) //后发送一列的上半部分,第1个字。
so=0
so=1 //产生上升沿锁存信号
lie() //一个字的上半部分和下半部分发送完毕点燃该列。
delay() //调用延时子程序
gate=1 //关列显示
}
}
/**机内码发送子程序**/
void send8bit(unsigned int n)
{
for(q=0q<8q++)
{
dat=!((_cror_(disbuf[n],q))&0x01)//右移(7-q)位,从低位到高位取。即595发送,
clock=0
clock=1 //寄存器时钟上跳沿,将一位数据存入移位寄存器。
}
}
/***列扫描***/
void lie(void)
{
gate=0 //允许列选择
P1=count
count++
if(count==16)
{
count=0
count++
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)