微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教 32*64 LED 点阵屏左/右移思路

请教 32*64 LED 点阵屏左/右移思路

时间:10-02 整理:3721RD 点击:

请教 32*64 LED 点阵屏左/右移思路


我的3264点阵屏是标准的08接口(芯片:595+245+138),我现在用AT89s52单片机作为驱动。我现在想做一个广告牌,就是让那些字幕进行左/右移,我想很久都没有算法思路,在网上和本论坛进行搜索,也没有满意的帖子。


我现在的点阵屏能够正常显示静态不移动的字体。显示上半屏是一维数组,下半屏显示时钟时间用的是二维数组。看附件

部分C51程序,请大家参考。

#include <REGX52.H>
#include "ziku.h"   //字库
#include "ds1302.h"
#include "ds18b20.h"
#define uchar unsigned char
#define uint unsigned int
int wendu;  //温度
#define hang P2 //行扫描显示
//sbit EN=P2^6; //显示屏使能
//sbit R2=P3^1; //显示红色下屏
sbit R1=P3^4; //显示红色上屏
sbit SCL=P3^3; //74hc595时钟
sbit ST=P3^2; //74hc595锁存
sbit G2=P3^1; //显示绿色下屏
sbit G1=P3^0; //显示绿色上屏
void write_595(uchar num , uchar dat)
{uchar i;
if(num==1)
  {
   for(i=0;i<8;i++)
{
  R1=dat&0x01;
  dat>>=1;
  SCL=0;
  SCL=1;
}
  }
if(num==2)
{
  for(i=0;i<8;i++)
  {
   dat>>=1;
   G2=CY;
   SCL=0;
   SCL=1; //74HC595上升沿数据移入
  }
}
}
void dispay1() //上半屏显示16X16汉字
{uchar i;
for(i=0;i<16;i++)
  {
//   write_595(1 , ~hzdot[i*2]);
//   write_595(1 , ~hzdot[i*2+1]);
//   write_595(1 , ~hzdot[i*2+32]);
//   write_595(1 , ~hzdot[i*2+32+1]);
//   write_595(1 , ~hzdot[i*2+64]);
//   write_595(1 , ~hzdot[i*2+64+1]);
//   write_595(1 , ~hzdot[i*2+96]);
//   write_595(1 , ~hzdot[i*2+96+1]);
   write_595(1,~hzdot[i*2]);
   write_595(1,~hzdot[i*2+1]);
   write_595(1,~hzdot[i*2+32]);
   write_595(1,~hzdot[i*2+32+1]);
   write_595(1,~shuzi[wendu/1000]);  //温度,十位
   write_595(1,~shuzi[wendu%1000/100]); //温度,个位
   write_595(1,~shuzi[(wendu%100/10)]); //温度,十分位   
//   write_595(2,~shuzi[(wendu%10)]); //温度,百分位
   write_595(1,~shuzi[11]); //温度符号:℃
   ST=0;
   ST=1; //74HC595上升沿锁存输出
   hang=i;
  }
}  
   
void dispay2() //下半屏显示ds1302时间
{uchar i;
for(i=0;i<16;i++)
  {
   write_595(2,~shuzi[hour>>4]);     
   write_595(2,~shuzi[hour&0x0f]);     
   write_595(2,~shuzi[10]);
   write_595(2,~shuzi[minute>>4]);     
   write_595(2,~shuzi[minute&0x0f]);     
   write_595(2,~shuzi[10]);
   write_595(2,~shuzi[second>>4]);     
   write_595(2,~shuzi[second&0X0F]);     
   ST=0;
   ST=1; //74HC595上升沿锁存输出
   hang=i;        
  }           
}
uchar init_DS18B20()
{ uchar tempH,tempL;
REST_DS18B20();
WRITE_DS18B20(0XCC);  
WRITE_DS18B20(0X44);
dispay1(); //上半屏显示欢迎词
dispay2(); //下半屏显示DS1302时间  
REST_DS18B20(); //DS18B20复位
WRITE_DS18B20(0XCC);  
WRITE_DS18B20(0XBE);  
tempL = READ_DS18B20();
tempH = READ_DS18B20();
wendu=((tempH*256)+tempL)*6.25; //读取温度,0.0625放大100倍=6.25
return wendu;
}
void main()
{
// init_ds1302();
while(1)
{ read(); //读取DS1302时间函数
init_DS18B20(); //读取温度并显示
}
}



好全面?,谢谢小编分享

小编的单片机内存小,要左移效果不怎么好,小编用的显示板应该是F3.75双色的板,给个思路,可以定义一个256字节的显示缓冲区,开一个定时器把缓冲区的数据送到屏上,再开一个定时器或者在main的while中把显示缓冲区的数据全部左移一位,

哈哈哈哈哈哈哈哈

附件在哪里。

有没有完整的程序?发到我邮箱  1767802879@qq.com

有没有完整的程序?发到我邮箱  1767802879@qq.com

我有个这样的点阵,但是没找到左移程序,能给个吗?我没时钟,jianxin8187@163.com谢谢

sdsdsdsdsdsdsdasdsad12e e12d1 2e1 e1

小编你好,刚好最近在做这个,可以把完整程序发给我学习一下吗,多谢。935362083@qq.com

看来搞32-*64的点阵屏的人有很多啊!

首先,你先只显示一个字符,然后一次的去移位去移动这个字符。 前提是你必须连接各个驱动的驱动方式。 然后再来移动多个字符。 我自己就是这样做的。  只要你耐心的这样做,肯定是可以对的!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top