一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3287|回复: 8

32X64点阵显示上下各四个字 出了问题 求指点

[复制链接]
发表于 2012-10-24 22:28 | 显示全部楼层 |阅读模式
下面能够正常显示  上面的显示不对  如图

还有最右边的那个通字怎么少了一竖

还有最右边的那个通字怎么少了一竖
  1. #include <AT89X52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit LT=P2^0;
  6. sbit SK=P2^1;
  7. sbit DAT1=P2^2;
  8. sbit DAT2=P2^3;
  9. sbit EN=P2^4;

  10. uchar code daima1[][32]=
  11. {
  12. {0xFF,0x7F,0xFF,0x7F,0x03,0x7F,0xFB,0x03,0xFA,0xFB,0xB6,0xF7,0xD5,0xBF,0xEB,0xBF,
  13. 0xEF,0xBF,0xD7,0x5F,0xDB,0x5F,0xBA,0xEF,0x7E,0xEF,0xFD,0xF7,0xFB,0xFB,0xF7,0xFD},/*"欢",0*/

  14. {0xFF,0xFF,0xDF,0x7F,0xEC,0xC3,0xED,0xDB,0xFD,0xDB,0xFD,0xDB,0x0D,0xDB,0xED,0xDB,
  15. 0xED,0xDB,0xED,0x4B,0xEC,0xD7,0xED,0xDF,0xEF,0xDF,0xD7,0xDF,0xB8,0x01,0xFF,0xFF},/*"迎",1*/

  16. {0xFE,0xFF,0xDE,0xF7,0xEE,0xF7,0xF6,0xEF,0xF6,0xDF,0xFE,0xFF,0x00,0x01,0xFB,0xBF,
  17. 0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xF7,0xBD,0xF7,0xBD,0xEF,0xBD,0xDF,0xC1,0x3F,0xFF},/*"光",2*/

  18. {0xF7,0x7F,0xF7,0x7F,0xF7,0x7F,0xB6,0x01,0xB6,0xBF,0xB5,0xDF,0xB3,0xDF,0xB7,0xFF,
  19. 0xB6,0x03,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xF6,0x03,0xF6,0xFB,0xF7,0xFF},/*"临",3*/
  20. };

  21. uchar code daima2[][32]=
  22. {
  23. {0xFF,0xFF,0xB8,0x07,0xDF,0xEF,0xDE,0x5F,0xFF,0xBF,0xF8,0x03,0x1B,0xBB,0xDB,0xBB,
  24. 0xD8,0x03,0xDB,0xBB,0xDB,0xBB,0xD8,0x03,0xDB,0xBB,0xDB,0xAB,0xAB,0xF7,0x70,0x01},/*"通",0*/

  25. {0xF7,0xBF,0xF7,0xDF,0xF4,0x01,0xEF,0xFF,0xEF,0xFF,0xCE,0x03,0xCF,0xFF,0xAF,0xFF,
  26. 0x6E,0x03,0xEF,0xFF,0xEF,0xFF,0xEE,0x03,0xEE,0xFB,0xEE,0xFB,0xEE,0x03,0xEE,0xFB},/*"信",1*/

  27. {0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0xDF,0x7F,0x04,0x0F,0xDF,0x6F,0xDF,0x6F,0xDD,0x67,
  28. 0xDD,0x6B,0xDB,0x6D,0xD7,0x6D,0xDF,0x6F,0xDE,0xEF,0xDE,0xEF,0xDD,0xAF,0xDB,0xDF},/*"协",2*/

  29. {0xFE,0xFF,0xFE,0xFF,0xFD,0x7F,0xFB,0xBF,0xF7,0xDF,0xCF,0xE7,0x30,0x19,0xFF,0xFF,
  30. 0xFF,0xFF,0x80,0x03,0xFD,0xFF,0xFB,0xFF,0xF7,0xDF,0xEF,0xEF,0xC0,0x07,0xEF,0xF7},/*"会",3*/
  31. } ;

  32. void Delay_ms(uint n);
  33. void Init();
  34. void Write_595_1(uchar dat);
  35. void Write_595_2(uchar dat);
  36. void Hangxuan(uchar i);

  37. void main()
  38. {
  39.         uchar hang=0,m,n,k,shuju=0;
  40.         Init();                //初始化数据
  41.         while(1)
  42.                 {
  43.                         for(m=0;m<32;m+=2)       //每个字有32个代码,每次写每个字的两个代码
  44.                                 {
  45.                                         for(n=0;n<4;n++)  //显示上面四个汉字
  46.                                                 {
  47.                                                         shuju=daima1[n][m+1];
  48.                                                         Write_595_1(shuju);   //写某个字的右半部分
  49.                                                         shuju=daima1[n][m];  //选择第几个字的第几个代码,先写某个字的左半部分
  50.                                                         Write_595_1(shuju);        
  51.                                                 }
  52.                                         for(k=0;k<4;k++)  //显示下面四个汉字
  53.                                                 {
  54.                                                         shuju=daima2[k][m+1];
  55.                                                         Write_595_2(shuju);
  56.                                                         shuju=daima2[k][m];
  57.                                                         Write_595_2(shuju);                                                                        
  58.                                                 }
  59.                                                         Hangxuan(hang);
  60.                                                         hang++;
  61.                                                         if(hang==16)
  62.                                                                 hang=0;
  63.                                                         LT=1;
  64.                                                         Delay_ms(10);
  65.                                                 }
  66.                 }
  67. }

  68. void Init()
  69. {
  70.         DAT1=0;
  71.         DAT2=0;
  72.         SK=0;
  73.         EN=1;
  74.         P1=0x00;
  75. }

  76. void Write_595_1(uchar dat)
  77. {
  78.         uchar i;
  79.         for(i=0;i<8;i++)
  80.                 {
  81.                         if((dat&0x80)==0)
  82.                                 DAT1=0;
  83.                         else
  84.                                 DAT1=1;
  85.                         dat<<=1;
  86.                         SK=1;
  87.                         _nop_();
  88.                         _nop_();
  89.                         SK=0;
  90.                 }
  91.         LT=0;
  92. }

  93. void Write_595_2(uchar dat)
  94. {
  95.         uchar i;
  96.         for(i=0;i<8;i++)
  97.                 {
  98.                         if((dat&0x80)==0)
  99.                                 DAT2=0;
  100.                         else
  101.                                 DAT2=1;
  102.                         dat<<=1;
  103.                         SK=1;
  104.                         _nop_();
  105.                         _nop_();
  106.                         SK=0;
  107.                 }
  108.         LT=0;
  109. }

  110. void Hangxuan(uchar i)
  111. {
  112.         uchar k;
  113.         k=P1&0xf0;   //读回行号;
  114.         EN=1;
  115.         i&=0x0f;     //只要低四位
  116.         P1=i|k;      //高四位不变,只把低四位赋给P1口
  117.         EN=0;
  118. }

  119. void Delay_ms(uint n)
  120. {

  121.   while(--n) ;

  122. }
复制代码
发表于 2012-10-25 07:12 | 显示全部楼层
行驱动 是有32位么?大图发上来瞅瞅
回复

使用道具 举报

 楼主| 发表于 2012-10-25 07:57 | 显示全部楼层
仿真图.rar (31.96 KB, 下载次数: 561) 行驱动是两块138级联的  16行的
回复

使用道具 举报

发表于 2012-10-25 08:00 | 显示全部楼层
本帖最后由 litchiate 于 2012-10-25 08:03 编辑

你发上面的时候时钟锁存已经发过去了。再发下面的时候又发了次时钟和锁存,所以上面的就没有了。

同时准备上下的数据,然后时钟,锁存一起发就好了。
回复

使用道具 举报

 楼主| 发表于 2012-10-25 08:59 | 显示全部楼层
回复 4# litchiate

谢谢斑竹指点,已经搞定   十分感谢!
回复

使用道具 举报

发表于 2012-12-22 21:37 | 显示全部楼层
好好......
回复

使用道具 举报

发表于 2012-12-24 19:58 | 显示全部楼层
这个程序貌似是不是可简单了啊?
回复

使用道具 举报

发表于 2012-12-27 03:37 | 显示全部楼层
void main()
{
        uchar hang=0,m,n,k,shuju=0;
        Init();                //初始化数据
        while(1)
                {
                        for(m=0;m<32;m+=2)       //每个字有32个代码,每次写每个字的两个代码
                                {
                                        for(n=0;n<4;n++)  //显示上面四个汉字
                                                {
                                                        shuju=daima1[n][m+1];
                                                        Write_595_1(shuju);
                              //写某个字的右半部分
                                                        shuju=daima1[n][m];   //选择第几个字的第几个代码,先写某个字的左半部分
                                                        Write_595_1(shuju);
                                                                                                       
                                                                                                               
                                                }
                                                                                                        Hangxuan(hang);
                                                        hang++;
                                                        if(hang==16)
                                                                hang=0;
                                                        LT=1;
                                                                                                 Delay_ms(10);  
                                 }                     
                                                              
                          for(m=0;m<32;m+=2)       //每个字有32个代码,每次写每个字的两个代码
                                {                             
                                        for(k=0;k<4;k++)  //显示下面四个汉字
                                                {
                                                        shuju=daima2[k][m+1];
                                                        Write_595_2(shuju);
                                                                                               
                                                        shuju=daima2[k][m];
                                                        Write_595_2(shuju);  
                                                                                                                                                                                                                                                   
                                                }
                                          
                                                                                                        Hangxuan(hang);
                                                        hang++;
                                                        if(hang==16)
                                                                hang=0;
                                                        LT=1;
                                                 Delay_ms(10);
                                   }
                }
}

改成这样就行了
回复

使用道具 举报

发表于 2013-3-10 17:15 | 显示全部楼层
把输出的r1 g2 给到输入的r2 g2就行了 我的也是这毛病这样街上就好了
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-1-12 17:22 , Processed in 0.037656 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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