这是程序:
#include "include.h"
#include "sys.h"
#define DZ_DATA P4OUT //573位选信号的输入管脚
#define CLK_H P6OUT|=BIT2 //595时钟信号的输入置高
#define CLK_L P6OUT&=~BIT2 //595时钟信号的输入置低
#define ST_H P6OUT|=BIT3 //595锁存信号置高
#define ST_L P6OUT&=~BIT3 //595锁存信号置低
#define DATA_H P6OUT|=BIT1 //595数据信号输入置高
#define DATA_L P6OUT&=~BIT1 //595数据信号置低
#define LED_E0 P5OUT|=BIT7 //数码管 573使能置高
#define LED_E1 P5OUT&=~BIT6 //点阵 573使能置低
//点阵数据显示数组
uchar DZDataTab[80]={ 0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00, //0
0x00,0x00,0x01,0x21,0x7F,0x01,0x01,0x00, //1
0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00, //2
0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00, //3
0x00,0x00,0x0C,0x14,0x24,0x7F,0x04,0x00, //4
0x00,0x00,0x72,0x51,0x51,0x51,0x4E,0x00, //5
0x00,0x00,0x3E,0x49,0x49,0x49,0x26,0x00, //6
0x00,0x00,0x40,0x40,0x40,0x4F,0x70,0x00, //7
0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00, //8
0x00,0x00,0x32,0x49,0x49,0x49,0x3E,0x00}; //9
void Por
tinit();
void Lv595WriteData(uchar dat);
void main()
{
uchar i=0,j=0,t=0;
uchar wx; //位选信号控制
ClockInit();
WDTInit();
PortInit();
while(1)
{
if(i==80)
i=0;
while(t!=100) //在此可修改每个数字显示的持续时间
{
t++;
wx=0x01;
for(j=i;j<i+8;j++)
{
Lv595WriteData(DZDataTab[j]);
DZ_DATA=wx;
DelayMs(1);
wx<<=1;
}
}
t=0;
i+=8;
}
}
/*
****************************************************************************
* PortInit()
* 功能说明 ;IO初始化
* 参数 :无
* 返回值 :无
****************************************************************************
*/
void PortInit()
{
P4SEL=0X00;
P4DIR=0XFF;
P6SEL=0X00;
P6DIR=0XFF;
P5SEL=0X00;
P5DIR=0XFF;
LED_E1;
LED_E0;
P1SEL=0X00;
P1DIR=0XFF;
P1OUT=0X01;
}
/*
****************************************************************************
* Lv595WriteData(uchar dat)
* 功能说明 ;向595发送一个字节的数据
* 参数 :dat:发送的数据(一个字节)
* 返回值 :无
****************************************************************************
*/
void Lv595WriteData(uchar dat)
{
uchar i;
CLK_H;
DelayUs(1);
ST_H;
for(i=8;i>0;i--) //循环八次,写一个字节
{
if(dat&0x01) //发送BIT0 位
DATA_H;
else
DATA_L;
CLK_L;
DelayUs(1);
CLK_H; //时钟上升沿
dat=dat>>1; //要发送的数据右移,准备发送下一位
}
ST_L;
DelayUs(1);
ST_H; //锁存数据
}
一周热门 更多>