当前位置:首页 > (完整版)LED显示屏控制器的设计与实现毕业设计40设计41
TR1=1; 启动定时器1
PS=1; 串口中断优先 R1=0; 数据初始化 R2=0;
while(1) {
循环16次,点亮并移动
一个汉字,步进是一位
for(col=0;col<32;col++)循环32次,点亮并移动一个汉字,步进是一位, {
coll=col%8;
for(i=0;i for(disrow=0;disrow<16;disrow++)扫描16行 { Load_one_line();装载上下两屏各一线点阵数据 Send_one_line();发送一线点阵数据 STB=0; STB=1; 输出锁存 A=disrow&0x01; BB=disrow&0x02; C=disrow&0x04; D=disrow&0x08; PWM_LIGHT(LIGHT); } } } word=word+1; 一个汉字移动后,指向下一个汉字 if(word>=NUMBER) { word=0;移动完NUMBER个汉字后 重新开始 } } } E2: 下位机接收程序 #include { if(flag==1) { for (t=0;t<16;t++) { HC138_OE=0; HC595_STB=0; HC595_CLK=0; for (k=0;k<4;k++) { r_data[2*k]=0xff-read_date(k*32+t*2+1 ); r_data[2*k+1]=0xff-read_date(k*32+t*2 ); g_data[2*k]=0xff-read_date(k*32+t*2+1 ); g_data[2*k+1]=0xff-read_date(k*32+t*2 ); } HC138_OE=0; HC595_STB=1; HC595_STB=0; HC595_CLK=0; delay_ms(4); HC138_OE=1; HC138_A=t&0x01; HC138_B=t&0x02; HC138_C=t&0x04; HC138_D=t&0x08; for (k=0;k<8;k++) { write595(r_data[k],g_data[k]); } } } } } void c64_init() { scl=1; sda=1; } void start() { sda=1; delay(); scl=1; delay(); sda=0; delay(); } void stop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } void ack() { uchar i; scl=1; delay(); while((sda==1)&&i<200) i++; scl=0; delay(); } void noack() { sda=1; delay(); scl=1; delay(); scl=0; delay(); } void write(uchar date) { uchar i; scl=0; for(i=0;i<8;i++) { if(date&0x80) { sda=1; } else { sda=0; } date<<=1; delay(); scl=1; delay(); scl=0; delay(); } sda=1; delay(); } uchar read() { uchar i,temp; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); temp<<=1; if(sda) {temp|=0x01;} scl=0; delay(); } return temp; } void write_date(uchar add,uchar date) { c64_init(); start(); write(0xa0); ack(); write(add256); ack(); write(add%6); ack(); write(date); ack(); stop(); delay_ms(5); } uchar read_date(uchar add) { uchar temp; c64_init(); start(); write(0xa0); ack(); write(add256); ack(); write(add%6); 取出低位ack(); start(); write(0xa1); ack();
共分享92篇相关文档