一乐交易区摊主
主题
回帖0
积分69798
阅读权限30
注册时间2009-12-14
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2010-3-16 08:28
|
显示全部楼层
熊用自己的A屏程序测试了一下B屏,不亮只亮几个点.想想沈老师的程序是A/B屏通用的.看了一下电路发现A屏与B屏主的区别就在于B屏H-BR信号是接在14015的复位上的,而A屏是接在595上的.当时熊为了显示一个汉字在每行移位前都清一下595数据,到B屏上就成了清14015数据了,于是行扫描数据丢失,把那两句屏闭掉就行了.附最后的程序,作用是切换显示"考拉","你好".
用C写点阵屏程序每行的延迟时间要短一点,汇编可以1ms不感觉闪烁,C只能0.5ms,毕竟效率低一点.沈老师的程序不延时,因为是移动的,所以无所谓.
/************************************
mcu=89S52 f=11.0592mhz
实验内容:FU电路板shqi2003LED板测试
具体实验:在LED屏A/B上显示汉字
实验日期:2010-3-15
*************************************/
/*** 系统头文件包含区 ***/
#include<REGX52.H>
/*** 宏定义区 ***/
#define H_MR P0_0
#define H_AB P0_1
#define L_STR P0_2
#define L_CLK P0_3
#define L_R P0_4
/*** 自定义数据类型区 ***/
typedef unsigned char uchar;
typedef unsigned int uint;
/*** 函数原型声明区 ***/
void clear_led();
void led_disp(uchar *p);
void delay_ms(uint x);
/*** 全局变量声明区 ***/
uchar code data_tbl1[]={
0x02,0x00,0x10,0x80,0x02,0x10,0x10,0x60,0x3F,0xD8,0x10,0x20,0x02,0x20,0x11,0xFE,
0x02,0x40,0xFC,0x00,0x7F,0xFE,0x10,0x08,0x01,0x00,0x15,0x0C,0x02,0x00,0x18,0x88,
0x07,0xFC,0x30,0x88,0x1A,0x00,0xD0,0x48,0xE7,0xF8,0x10,0x50,0x02,0x08,0x10,0x50,
0x00,0x08,0x10,0x50,0x00,0x08,0x17,0xFE,0x00,0x50,0x50,0x00,0x00,0x20,0x20,0x00
}; //考拉2字
uchar code data_tbl2[]={
0x09,0x00,0x10,0x00,0x09,0x80,0x11,0xFC,0x11,0x04,0x10,0x08,0x13,0xFE,0x10,0x10,
0x22,0x04,0xFC,0x20,0x34,0x48,0x24,0x20,0x68,0x40,0x24,0x20,0xA2,0x50,0x27,0xFE,
0x23,0x48,0x44,0x20,0x22,0x48,0x64,0x20,0x24,0x44,0x18,0x20,0x24,0x46,0x08,0x20,
0x28,0x44,0x14,0x20,0x21,0x40,0x26,0x20,0x20,0x80,0x44,0xA0,0x00,0x00,0x80,0x40
}; //你好2字
/*** 主程序区 ***/
void main(){
uint i;
clear_led(); //清LED屏
while(1){
for(i=0;i<50;i++)
led_disp(data_tbl1);
for(i=0;i<50;i++)
led_disp(data_tbl2);
}
}
/*** 子程序区 ***/
/*LED屏清屏函数*/
void clear_led(){
uchar i;
H_AB=0;
L_STR=1;
for(i=0;i<16;i++){ //清164数据
L_STR=0;
L_STR=1;
}
H_MR=0; //清595数据
H_MR=1;
L_STR=0;
}
/*LED屏显示函数*/
void led_disp(uchar *p){
uchar i,j,k,a;
H_AB=1;
for(i=0;i<16;i++){
// H_MR=0; //清595数据,A屏可以使用,B屏不能使用
// H_MR=1;
for(j=0;j<4;j++){ //移位字节数控制
a=p[(15-i)*4+3-j];
for(k=0;k<8;k++){ //595数据移出1字节
L_R=a&0x01; //最低位移出
L_CLK=0;
L_CLK=1;
a>>=1;
}
}
L_STR=1; //595数据输出
L_STR=0; //164移位
H_AB=0;
delay_ms(1); //延时0.5ms
}
L_STR=1; //164多移1位清显示
L_STR=0;
}
/*延时函数,延时x*0.5ms */
void delay_ms(uint x){
uchar i;
while(x--){
for(i=0;i<57;i++)
{;}
}
} |
|