#include <intrins.h>
#define uchar unsigned char
sbit pinDIN = P3^0//DIN 串行数据输入端口。在时钟上升沿时数据被载入内部的16位寄存器。
sbit pinLOAD = P3^1//LOAD (MAX7219) 载入数据。连续数据的后16位在LOAD端的上升沿时被锁定。
sbit pinCLK = P3^2//在时钟的上升沿, 数据移入内部移位寄存器。 下降沿时, 数据从DOUT端输出。
uchar code LEDcode[] = { 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b, 0x00 }
/*
void delay1000( void )
{
unsigned char a, b, c for ( c = 1 c > 0 c-- )
for ( b = 142 b > 0 b-- )
for ( a = 2 a > 0 a-- )
}
*/
//【增加】 延时1秒 函数
void delay1s(void) //@12MHz
{
unsigned char a,b,c
for(c=46c>0c--)
for(b=152b>0b--)
for(a=70a>0a--)
_nop_() //if Keil,require use intrins.h
}
void sendbyte( uchar dat )
{
uchar i, temp
_nop_()
for ( i = 0 i < 8 i++ )
{
temp = dat & 0x80
dat = dat << 1
if ( temp )
pinDIN = 1
else
pinDIN = 0
pinCLK 森败= 0
_nop_()
pinCLK = 1
}
}
void sendword( uchar addr, uchar dat )
{
pinLOAD = 0
_nop_()
sendbyte( addr )
_nop_()
sendbyte( dat )
_nop_()
pinLOAD 姿春孙= 1
delay1000()
}
void init7219( void )
{
sendword( 0x0c, 0x01 )
sendword( 0x0a, 0x09 )
sendword( 0x0b, 0x03 )
sendword( 0x09, 0x00 )
sendword( 0x0f, 0x00 )
}
void clear7219( void )
{
uchar i for ( i = 8 i > 0 i-- )
{
sendword( i, 0x00 )
}
}
void main( void )
{
int n = 60
int s = 0
int g = 0
init7219()
while ( 1 )
{
//clear7219() //【屏蔽】不然不显示
if ( n > 0 )
{
n = n - 1
s = n / 10
g = n % 10
//LEDcode[s] //【屏蔽】
//LEDcode[g] //【屏蔽】
}
sendword( 0x01, LEDcode[s] )//【增迹链加】显示十位数
sendword( 0x02, LEDcode[g] )//【增加】 显示个位数
delay1s()//【增加】 延时一下,不然变化太快,看不到效果
/* //【屏蔽以下语句】
sendword( 0x01, LEDcode[1] )
sendword( 0x02, LEDcode[2] | 0x80 )
sendword( 0x03, LEDcode[3] )
sendword( 0x04, LEDcode[4] )
sendword( 0x05, LEDcode[5] )
sendword( 0x06, LEDcode[6] )
sendword( 0x07, LEDcode[7] )
sendword( 0x08, LEDcode[8] )
//*/
}
}
已在protues中仿真通过。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)