/show/
void trasmit(unsigned char byte,unsigned char bit_count){
unsigned char tmp;
tmp=bit_count;
byte<<=3;
clock=0;
for(;tmp>0;tmp--) {
// while(tmp--){
if (byte&0x80)wdata=1;
else wdata=0;
clock=1;_nop_();clock=0;
byte<<=1;
}
rdata=0;
rdata=1;_nop_();rdata=0;
}
//
void show0(unsigned char y){
unsigned char i;
wdata=1;
for(i=0;i<y;i++){
clock=1;
clock=0;
}
rdata=1;
rdata=0;
}
//
void display(void){
unsigned char k,row,bit_cnt;
iout=0x01;
for(row=0;row<7;row++)
{
bit_cnt=5;
for(k=0;k<9;k++){
if(show_letter[k]>127)show_letter[k]=_NUL;//
temp_data[k]=letter[show_letter[k]][row];
}
SCAN_PORT=0xff;
for(k=0;k<9;k++)
{
if(!int_f){
if(k==8)bit_cnt=bit_step_temp;
trasmit(temp_data[k],bit_cnt);
}
else if(k==8 && !brake_f){
if(right_flag|left_flag)trasmit(temp_data[k],bit_cnt);
}
else {
if(brake_f)show0(40);
else trasmit(temp_data[k],bit_cnt);
}
if((brake_f1|right_flag|left_flag| k==8) && REVERSE_S);
else show0(1);
}
if(right_flag|left_flag){
show0(2);
}
//if(brake_f1)show0(5);
SCAN_PORT=~iout;
//if(brake_f)SCAN_PORT=0xff;
// if(brake_f)
DelayMs(4);
iout=iout<<1;
SCAN_PORT=0xff;
}
}
//明显是缺少消隐的环节所至。试试下列修改:
while(1)
for (i = 0; i < 8; i++) {
SendByte2(0); //关闭所有行
Send2Byte(maohao[2i],maohao[2i+1],1); //输出一行点阵码
SendByte2(hang[i]); //打开显示的行
Out5951(); //行信号输出
DelayMs(4); //该行显示4ms
};呵呵 这要用到生物知识了! 从显示器原理上讲,你在屏幕上看到的任何字符、图像等全都是由垂直方向和水平方向排列的点阵组成。由于显像管荧光粉受电子束的击打而发光的延时很短,所以此扫描显示点阵必须得到不断的刷新。刷新频率就是屏幕刷新的速度。刷新频率越低,图像闪烁和抖动的就越厉害,眼睛疲劳得就越快。有时会引起眼睛酸痛,头晕目眩等症状。过低的刷新频率,会产生令人难受的频闪效应。而当采用75Hz以上的刷新频率时可基本消除闪烁。因此,75Hz的刷新频率应是显示器稳定工作的最低要求。
求采纳主循环程序中,j 循环结束别加延时,那个delay(250);删掉。j 循环一次只是显示一屏,应再循环显示n屏,再 i 循环,调这个n大小,就是调滚动的速度。
你现在是,一屏只显示一次,又加延时250,这等于黑屏了250的延时,那还不闪一下才怪!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)