钻石会员
  
主题
帖子
积分11063
阅读权限50
注册时间2009-12-25
最后登录1970-1-1
在线时间 小时
|
void sendbyte(unsigned char num) {
unsigned char c;
unsigned char f;
for (c=8;c>0;c--) {
LED_TPIC6B595_SRCK=0;
f=num&0x80;
LED_TPIC6B595_SER_IN_G0=(G0 && f);
LED_TPIC6B595_SER_IN_R0=(R0 && f);
LED_TPIC6B595_SER_IN_G1=(G1 && f);
LED_TPIC6B595_SER_IN_R1=(R1 && f);
LED_TPIC6B595_SRCK=1;
num=num<<1; //左移1位
}
}
void sendbyte_3_yd(unsigned char num,unsigned char bit_num) {
for (;bit_num>0;bit_num--) {
LED_nnn=(1 && (num&0x80));
num=num<<1;
LED_TPIC6B595_SRCK=0;
LED_TPIC6B595_SRCK=1;
}
}
//x轴向左移动内容[数组][开始位置][显示字符数][周期]
void str_x1(unsigned char *str, unsigned int s,unsigned int strlen,unsigned int f) {
unsigned int x,j;
unsigned int mm;
unsigned int hz=strlen; // 屏幕字数
unsigned int m=s;//m是从字模数组里向后取数据时的计数器,用以改变显示文字的内容,及滚动显示效果
unsigned char y,n;
for (x=0;x<16;x++)
{
LED_CS_00; //模拟74hc164,先关显示,以免164内数据移动过程中在屏上产生不良影响,
for (j=0;j<f;j++) //显示内容的周期
for (y=0;y<16;y++) {
{
for (n=0;n<hz;n++) { //有hz个16*16点阵
mm=(m+n )*32 ; //这个循环会大大拖慢显示速度,造成黑屏时间长,会闪烁。
// sendbyte(hzdot[y+y+mm]);
// sendbyte(hzdot[y+y+mm+1]);
// sendbyte( *( str + y+y+mm ) );
// sendbyte( *( str + y+y+mm+1 ) );
spi_send( *( str + y+y+mm ) );
spi_send( *( str + y+y+mm+1 ) );
// sendbyte_2( *( str + y+y+mm),8); // 可以用sendbyte_2替换sendbyte
// sendbyte_2( *( str + y+y+mm+1),8); //
}
/*x轴向左移动一步*/
mm+=32 ;
if (x<9) sendbyte_3_yd( *( str + y+y+mm),x);
if (x>=9) {
spi_send( *( str + y+y+mm));
sendbyte_3_yd( *( str + y+y+mm+1),x-8);
}
/*x轴向左移动一步*/
set_74HC138(y);//关闭显示,并换行
}
}
}
}
大概实现方法
sendbyte 跟sendbyte_3_yd有什么不同,自己参考 |
|