搜索
bottom↓
回复: 15

做LED显示屏遇到麻烦!求教各路LED显示屏高手指教!谢谢

[复制链接]

出0入0汤圆

发表于 2013-6-15 19:51:09 | 显示全部楼层 |阅读模式
做了个LED显示屏,但遇到麻烦!求教各路LED显示屏高手指教!谢谢!
我下面那个程序是流动显示汉字的,但怎样在这个程序的基础上实现先静态显示汉字几秒钟,然后再实现流动显示?试过很多方法都不能实现,老是乱码,请求指点
#include "reg51.h"

#define OutByte()          RCK = 0;RCK = 1
sbit A1 = P1^1;
sbit B1 = P1^2;
sbit SER = P1^6;
sbit SCK = P1^4;
sbit RCK = P1^5;

unsigned char code Z[288] = {
/*欢   CBBB6 */
0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,
0x05,0x04,0x49,0x08,0x2A,0x40,0x14,0x40,
0x10,0x40,0x28,0xA0,0x24,0xA0,0x45,0x10,
0x81,0x10,0x02,0x08,0x04,0x04,0x08,0x02,

/*迎   CD3AD */
0x00,0x00,0x20,0x80,0x13,0x3C,0x12,0x24,
0x02,0x24,0x02,0x24,0xF2,0x24,0x12,0x24,
0x12,0x24,0x12,0xB4,0x13,0x28,0x12,0x20,
0x10,0x20,0x28,0x20,0x47,0xFE,0x00,0x00,

/*光   CB9E2 */
0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,
0x09,0x20,0x01,0x00,0xFF,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x42,
0x08,0x42,0x10,0x42,0x20,0x3E,0xC0,0x00,

/*临   CC1D9 */
0x08,0x80,0x08,0x80,0x08,0x80,0x49,0xFE,
0x49,0x40,0x4A,0x20,0x4C,0x20,0x48,0x00,
0x49,0xFC,0x49,0x24,0x49,0x24,0x49,0x24,
0x49,0x24,0x09,0xFC,0x09,0x04,0x08,0x00,

/*本   CB1BE */
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x7F,0xFC,0x03,0x80,0x05,0x40,0x05,0x40,
0x09,0x20,0x11,0x10,0x21,0x08,0x4F,0xE4,
0x81,0x02,0x01,0x00,0x01,0x00,0x01,0x00,

/*人   CC8CB */
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,
0x04,0x40,0x04,0x40,0x08,0x20,0x08,0x20,
0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02

};
char zi=0;

/*
void OutByte()
{
        RCK = 0;
        RCK = 1;
}         */

void DelayMs(int ms)
{
        int i,j;
        for(i=0;i<ms;i++)
        {
                for(j=0;j<100;j++);
        }
}

void LineScan(char line)
{
        switch(line)
        {
                case 0:A1 = 0;B1 = 0;
                break;
                case 1:A1 = 1;B1 = 0;
                break;
                case 2:A1 = 0;B1 = 1;
                break;
                case 3:A1 = 1;B1 = 1;
                break;
                default:
                break;
        }
}

void SendByte(char byte)
{
        char i;
        for(i = 0;i<8;i++)
        {
                if(byte & 0x80)SER = 1;         //1000_0000
                else SER = 0;
                byte = byte << 1;
                SCK = 0;         
                SCK = 1;         //数据提前2指令周期准备好       
        }
}

void initTimer(void)
{
TMOD=0x1;
TH0=0xd8;
TL0=0xf0;
}

void timer0(void) interrupt 1
{
         static char i;
         TH0=0xd8;
         TL0=0xf0;
         i++;
     if(i>=50)
         {          
             i=0;
                 zi++;
                 if(zi>2)zi=0;
     }

}

void main(void)
{
        char i,j,k;
        initTimer();
        TR0=1;
        ET0=1;
        EA=1;
        while(1)
        {
           for(k=0;k<=3;k++)
           {
                   for(j=0;j<=7;j++)
                   {
                      for(i=3;i>=0;i--)
                                 
                              SendByte(~Z[zi*32+i*8+k*2+(j/2)*32+j%2]);
                   }
                   LineScan(k);
                   OutByte();
                   DelayMs(3);
           }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入90汤圆

发表于 2013-6-15 20:02:26 | 显示全部楼层
发这么长的程序谁看啊!最多跟你讨论下思路!看代码就免了

出0入0汤圆

发表于 2013-6-15 22:29:40 | 显示全部楼层
先把要显示的数据送去显示
再延时你需要的时间
最后再送动态的数据
如此循环。。。。。

出0入0汤圆

发表于 2013-6-15 22:54:13 | 显示全部楼层
把动态显示的静态显示做成不同的子程序,再在主程序里面调用不同的子程序,延时再调用就好。

出0入0汤圆

 楼主| 发表于 2013-6-16 07:06:50 | 显示全部楼层
lxa0 发表于 2013-6-15 22:29
先把要显示的数据送去显示
再延时你需要的时间
最后再送动态的数据

我是这样想的啊!下面是我改的程序,但是下载进去就乱码啦
void main(void)
{
        char i,j,k;
        initTimer();
        TR0=1;
        ET0=1;
        EA=1;
        while(1)
        {
           for(k=0;k<=3;k++)
           {
                   for(j=0;j<=7;j++)
                   {
                      for(i=3;i>=0;i--)
                                 SendByte(~Z[i*8+k*2+(j/2)*32+j%2]);
                              DelayMs(3);
                               SendByte(~Z[zi*32+i*8+k*2+(j/2)*32+j%2]);
                   }
                   LineScan(k);
                   OutByte();
                   DelayMs(3);
           }
        }
}

出0入0汤圆

 楼主| 发表于 2013-6-16 07:11:00 | 显示全部楼层
lxa0 发表于 2013-6-15 22:29
先把要显示的数据送去显示
再延时你需要的时间
最后再送动态的数据

哦哦,为啥不能加个延时?我加延时后就乱码了!
  void main(void)
{
        char i,j,k;
        initTimer();
        TR0=1;
        ET0=1;
        EA=1;
        while(1)
        {
           for(k=0;k<=3;k++)
           {
                   for(j=0;j<=7;j++)
                   {
                      for(i=3;i>=0;i--)
                                  SendByte(~Z[i*8+k*2+(j/2)*32+j%2]);//静态显示
                                    DelayMs(3);
                              SendByte(~Z[zi*32+i*8+k*2+(j/2)*32+j%2]);//流动显示
                   }
                   LineScan(k);
                   OutByte();
                   DelayMs(3);
           }
        }
}

出0入0汤圆

发表于 2013-6-16 07:29:12 | 显示全部楼层
我觉得用定时器+状态机好弄

出0入0汤圆

 楼主| 发表于 2013-6-16 10:21:54 | 显示全部楼层
sdwy 发表于 2013-6-16 07:29
我觉得用定时器+状态机好弄

状态机是怎么搞的!不清楚耶!求指点

出0入0汤圆

发表于 2013-6-16 10:27:35 | 显示全部楼层
你这是P10的屏幕吧,我做过,你写两个函数轮流调换就可以了

出0入0汤圆

发表于 2013-6-16 11:32:39 | 显示全部楼层
Huangwenfeng 发表于 2013-6-16 10:21
状态机是怎么搞的!不清楚耶!求指点


我的意思与4楼和9楼两位朋友的一致
我说仔细点:
你写2个子程序
一个是数据不移动用的显示扫描
另一个是数据移动用的显示扫描
它俩交替调用
调用之间的空闲时间用个延时
就OK了
现在明白了吧?

出0入0汤圆

发表于 2013-6-16 11:39:02 | 显示全部楼层
滚动显示最好竖着扫描

出0入0汤圆

 楼主| 发表于 2013-6-16 12:53:21 | 显示全部楼层
lxa0 发表于 2013-6-16 11:32
我的意思与4楼和9楼两位朋友的一致
我说仔细点:
你写2个子程序

知道!貌似在这个程序的基础上不能够实现耶!

出0入0汤圆

发表于 2013-6-17 20:29:00 | 显示全部楼层
对呀
哪有直接就能实现的
那得自己学代码呀

出0入0汤圆

 楼主| 发表于 2013-6-18 05:57:26 | 显示全部楼层
lxa0 发表于 2013-6-17 20:29
对呀
哪有直接就能实现的
那得自己学代码呀

好的,谢谢啊!我试试再定义一个变量

出0入0汤圆

 楼主| 发表于 2013-6-18 06:33:50 | 显示全部楼层
飞思卡驴 发表于 2013-6-16 10:27
你这是P10的屏幕吧,我做过,你写两个函数轮流调换就可以了

不太懂耶!

出0入0汤圆

 楼主| 发表于 2013-6-18 06:34:34 | 显示全部楼层
Huangwenfeng 发表于 2013-6-18 05:57
好的,谢谢啊!我试试再定义一个变量

不是很懂
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 09:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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