电路原理图如下:
单片机源程序如下:
bit BIT_timeout=0;
void int0() interrupt 0 //使用外部中断0
{
BIT_timeout=1; //起点标志位
}
/*****************************************/
void Shift_data(unsigned char temp) /*发送数据*/
{
unsigned char k;
for(k=0;k<8;k++)//一个字节8位 发送给595
{
DATA_595=(bit)(temp&0x01);//通过IO口送一个位给 595
temp=temp>>1; //字节移位 准备送下一位
CLK_595=1;
CLK_595=0;
}
}
/*********延时子程序**********/
unsigned char DelayUs(unsigned char N)
{
unsigned char x ;
for(x=0;x<=N;x++)
{
if(BIT_timeout)
return 1;
}
return 0;
}
unsigned int i=0,j=0;
unsigned char Data_L=0xff;
unsigned char Data_H=0xff;
unsigned char time_delay=0;
unsigned char k;
#define ucNumRows 176 //定义一周显示字个数
void main_loop(void)
{
if(BIT_timeout) //起点判断
{
BIT_timeout=0; //清零
j++;
if(j>(uiFontNumber-ucNumRows))
j = 0;
for(i=j;i<(ucNumRows+j);i++) //立体显示176列 数据 176/16=11个字
{
Data_L=IapReadByte(i*2+2); //缓冲数据低位
Data_H=IapReadByte(i*2+3);//缓冲数据高位
Shift_data(Data_L); //送数据低位显示
Shift_data(Data_H);//送数据高位显示
CLK_595=1;
CLK_595=0;
OE_595=0;
if(DelayUs(35))//延时值 可以改变字体的宽度 值越大 字体越宽
{
OE_595=1;
return;
}
OE_595=1;
}
}
}
void main(void)
{
init();
while(1)
{
main_loop();
}
}
全部资料51hei下载地址:
上位机改字软件.7z
(177.86 KB, 下载次数: 7)
|