|
准备显示一个“你”字,用行扫描的方式显示行从上到下用0x01往左移动给每行从上到下的高电平
列码为:0xff,0xf3,0x85,0xa8,0xc5,0xA9,0xe5,0xed
可是写了程序后,就上四行显示正确,下四行不显示,而且通过一行一行测试,下四行每次一闪而过,而且显示的位置也不对,请老师们帮我解答下!!
以下为程序:
#include "reg51.h"
#include "intrins.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit SER=P3^4;
sbit shuchu=P3^5;
sbit yiwei=P3^6;
void delay(uint16 i){
while(i--);
}
uint8 code liema[8]={0xff,0xf3,0x85,0xa8,0xc5,0xA9,0xe5,0xed};
void HC595(uint8 dat1,uint8 dat2){
uint8 i;
for(i=0;i<8;i++){
SER=dat1>>7;
yiwei=0;
_nop_();
_nop_();
yiwei=1;
dat1<<=1;
}
for(i=0;i<8;i++){
SER=dat2>>7;
yiwei=0;
_nop_();
_nop_();
yiwei=1;
dat2<<=1;
}
shuchu=0;
_nop_();
_nop_();
shuchu=1;
}
void main(){
uint8 hangsao,i;
hangsao=0x01;
i=0;
while(1){
HC595(liema[i],hangsao);
delay(10);
hangsao=_crol_(hangsao,1);
i++;
if(i==8){
i=0;
}
}
//下边是我一行一行显示测试用的
//HC595(liema[0],0x01);
//HC595(liema[1],0x02);
//HC595(liema[2],0x04); //闪烁,为啥??
//HC595(liema[3],0x08);
//HC595(liema[4],0x10); //一闪而过 显示不正确
//HC595(liema[5],0x20); //一闪而过 显示不正确
//HC595(liema[6],0x40); //一闪而过 显示不正确
//HC595(liema[7],0x80); //一闪而过 显示不正确
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|