一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: dsl
收起左侧

P10 LED 单元板程式

  [复制链接]
发表于 2012-2-12 12:05 | 显示全部楼层
太好了,终于有程序了
发表于 2012-3-13 08:12 | 显示全部楼层
部分算法 很简单 我就不多罗嗦了 自己看一下吧
//最后完成时间:2011年5月4日15:08:24
//Made By:辽宁科技大学电子协会
#include<reg52.h>
#include<intrins.h>
#include"zimo.h"
#define uchar  unsigned char
#define uint   unsigned int
#define SPEED  15 //定义速度与速度成反比
#define NUMBER 10   //定义要显示总32X32汉字个数,计算方法:NUMBER=汉字个数
uchar word=0,col=0,coll=0,disrow=0;//wor为要显字变量,col为位移变量,col1为字节偏移量,disrow为行变量
uchar BUFF__UP[24];    //上半屏显示缓冲 上下缓冲字节数取值=[2*板点阵宽度/8]+1比较保险,即两倍板的点阵字节数.

sbit OE=P2^0;//74HC138的使能  高有效  0mie
sbit SCLK=P2^1; //时钟SCLK
sbit STB=P2^2;//74HC595输出锁存
sbit SDAR=P2^3;

//根据列指针由双字节合并为单字节的子程序模块
uchar Combine_2byte(uchar h1,uchar h2)
{
uchar T_date,tempcol;
tempcol=coll;
T_date=(h1>>tempcol)|(h2<<(8-tempcol));
return T_date;
}      

//分别装载上、下半屏点阵数据
void Load_one_line(void)
{
BUFF__UP[0]=Left[word][disrow*2+24];//11
BUFF__UP[1]=Left[word][disrow*2+16];
BUFF__UP[2]=Left[word][disrow*2+8];
BUFF__UP[3]=Left[word][disrow*2+0];

BUFF__UP[4]=Left[word][disrow*2+25];//22
BUFF__UP[5]=Left[word][disrow*2+17];
BUFF__UP[6]=Left[word][disrow*2+9];
BUFF__UP[7]=Left[word][disrow*2+1];

BUFF__UP[8]=Left[word+1][disrow*2+24];//33
BUFF__UP[9]=Left[word+1][disrow*2+16];
BUFF__UP[10]=Left[word+1][disrow*2+8];
BUFF__UP[11]=Left[word+1][disrow*2+0];

BUFF__UP[12]=Left[word+1][disrow*2+25];//44
BUFF__UP[13]=Left[word+1][disrow*2+17];
BUFF__UP[14]=Left[word+1][disrow*2+9];
BUFF__UP[15]=Left[word+1][disrow*2+1];
/////////////数据准备/////////////////////////
BUFF__UP[16]=Left[word+2][disrow*2+24];//55
BUFF__UP[17]=Left[word+2][disrow*2+16];
BUFF__UP[18]=Left[word+2][disrow*2+8];
BUFF__UP[19]=Left[word+2][disrow*2+0];

BUFF__UP[20]=Left[word+2][disrow*2+25];//66
BUFF__UP[21]=Left[word+2][disrow*2+17];
BUFF__UP[22]=Left[word+2][disrow*2+9];
BUFF__UP[23]=Left[word+2][disrow*2+1];

}
//发送屏一线点阵数据
void Send_one_line(void)
{
uchar s;
uchar TEMP,i,inc;
if(col<8)            inc=0;
if(8<=col&&col<16)   inc=4;
for(s=0+inc;s<=15+inc;s++)
{
TEMP=Combine_2byte(BUFF__UP[s],BUFF__UP[s+4]);
for(i=0;i<8;i++)
{
SDAR=(~TEMP)&0x01;//取出最高位
_nop_();
_nop_();
SCLK=0;
_nop_();
_nop_();
SCLK=1;//移位时钟
TEMP>>=1;
}
}
}
//亮度调节延时
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=5;j>0;j--)
;
}  
}
//亮度调整
void PWM_LIGHT(uchar p)
{
OE=1;
delay(p);
OE=0;
delay(10-p);
}
//主函数入口
void main(void)
{
uchar i;
SDAR=0;
while(1)
{         
for(col=0;col<16;col++)//循环16次,点亮并移动一个汉字,步进是一位,
{
coll=col%8;
for(i=0;i<SPEED;i++)//汉字在屏幕上的停留时间(即移动速度快慢)
{
for(disrow=0;disrow<4;disrow++)//扫描4行   
{
Load_one_line();//装载上下两屏各一线点阵数据
Send_one_line();//发送一线点阵数据
STB=0;
_nop_();
STB=1;    // 输出锁存                 
P1=disrow;// 行扫描        LIGHT
PWM_LIGHT(5);
OE=0;
}
}
}
word=word+1;// 一个汉字移动后,指向下一个汉字
if(word>=NUMBER)
{
word=0;//移动完NUMBER个汉字后重新开始
}
}
}
发表于 2012-4-1 10:37 | 显示全部楼层
现在这个用35的驱动板好象就直接可以用了
发表于 2012-4-16 14:41 | 显示全部楼层
行选接的是那个IO呢?
发表于 2012-4-16 16:45 | 显示全部楼层
行选接的是那个IO呢?
bqtx122 发表于 2012-4-16 14:41 https://www.yleee.com.cn/images/common/back.gif



    P1=disrow;// 行扫描        LIGHT   所以应该是P10 P11。
发表于 2012-4-23 19:59 | 显示全部楼层
本帖最后由 auxccc 于 2012-4-24 15:37 编辑

这个1/4扫的扫描还是可用的当前标准的T08,T12接口。扫描原理以16行X8列模块为单位,将1,5,9,13共同作为第一行与138相连,(138只需要2为输入就可有4线输出了,4扫的板子基本不需要用138),其他(2,6,10,14; 3,7,11,15; 4,8,12,16行)依此类推。列数据的595是串在一起的,先发第13行的8位,再发第9行的8位,再发第5行,再发第1行。4行都发完后锁存输出(1,5,9,13发数据时作为1行发,显示上为4行)。其他以此类推,大家看是不是这样的。
发表于 2013-8-30 15:45 | 显示全部楼层
我的板子和你的一样是p10,04接口。程序也是这个为什么用仿真软件仿不出你下屏的模样呢?
发表于 2013-9-5 13:07 | 显示全部楼层
新手  学习  谢谢楼主
发表于 2013-9-13 15:46 | 显示全部楼层
一楼的,能否给个接线图。我的邮箱号是:wzg-1031@163.com
发表于 2014-3-15 14:08 | 显示全部楼层
看你的样子 也是08接口的 有oe a b clk stclk r 但是程序中没有ab啊 即控制138的地址线

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-3 21:03 , Processed in 0.049930 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表