切换到宽版
  • 5158阅读
  • 8回复

[C51]求助:89S52 12M晶振驱动32*64点阵,实际闪烁感严重,拍的视频更严重 [复制链接]

上一主题 下一主题
离线chenppo
 

发帖
2019
M币
258
专家
27
粉丝
142
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2013-10-19

修改了多次,闪烁感无法去除,倒是弄明白怎么调亮度了。


这个程序本来说明“晶振用33M 单片机用STC89C51 6T 模式”
是不是单片机性能不足啊?然后行扫描的速度过慢?
89s52最高33MHz,后来我插了个40MHz的上去,还是一样。

+:看来最主要的问题是单片机的速度不够快。第一次觉得普通51性能不够了。原来觉得速度已经够快了。



实际的感觉是闪烁感很强,不像视频拍的这样。毕竟机器还是比人的眼睛快。
flash: http://player.youku.com/player.php/sid/XNjIzMzM1ODcy/v.swf

  1. /*
  2. 32_64_138_595点阵屏 C程序
  3. [LED显示屏] 2008-6-17
  4. 595连级输出数据,138行驱动。4593驱动 晶振用33M 单片机用STC89C51 6T 模式
  5. 单片机通过P0口与点阵屏连接,点阵屏列驱动为74HC595一个数8位,四字须8个595IC,行驱动为74HC138由于
  6. 两个138驱动16行。 本程序未用到串口,程序使用P0口模拟串口方式与595通信
  7. 8个595输出例信号,两个138输出16行信号。
  8. 595连级输出数据,138行驱动。4593驱动 晶振用33M 单片机用STC89C51 6T 模式
  9. //#include <at89x51.H>
  10. #include <reg52.h>
  11. #include <intrins.h> //包含NOP空指令函数_nop_();
  12. unsigned char code hanzi[4][32]; //字模数组
  13. unsigned char code sw[16]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x087,
  14.                            0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, };//138的驱动代码,根据138的真值表计算而来。 //p0.0--p0.3  代表ABCD 2片138扫描 16行[color=#008ef1]                         [/color]
  15. unsigned char e,i,a;
  16. /*ABCD--P00,P01,P02,P03*/
  17. unsigned char TEMPR;
  18.     bit b;
  19. sbit EN  =P3^0;                   //使能
  20. sbit STB =P1^4;                   //锁存
  21. sbit CLK =P1^5;                   //时钟
  22. sbit R   =P1^6;                   //红数据
  23. sbit G   =P1^7;                   //绿数据
  24. void delay();                     //延时
  25. void out_R(unsigned char *d);     //发送红色数据
  26. void out_G(unsigned char *d);     //发送绿色数据  
  27. void SHOW_R();                    //显示红色
  28. void delay()
  29. {unsigned char n;
  30. for(n=200;n>0;n--)
  31.    {;}
  32. }
  33. void main()
  34. {unsigned int f;
  35. //  P2_0=0;             //关闭蜂鸣器
  36. //CLK=0;
  37. while(1)            //重复循环显示
  38.   {
  39. for(i=1;i<=31;i+=2)         //
  40.      {
  41.      // EN=0;
  42.    // if(f<100)
  43.       SHOW_R();                //显示红色
  44.    // else if(f<200)
  45.    //   SHOW_G();                //显示绿色
  46.   //  else if(f<300)
  47.    //   SHOW_RG();               //显示红绿色
  48.    // else
  49.    //   SHOW_GR();               //显示绿红色    
  50.      // delay();
  51.                P0=sw[e];    //输出行信号
  52.       STB=0;
  53.     STB=1;     //锁存为高,595锁存信号
  54.   
  55.    // EN=1;                    //开显示
  56.       //delay();   //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/  
  57.       
  58.        e++;       //行加一
  59.     if(e==16)  //一共16行。
  60.      e=0;    
  61.    }
  62. //if(f++==400)
  63.   // f=0;              
  64.    }
  65. }
  66. void SHOW_R()
  67. {
  68.     out_R(&hanzi[0][i-1]); //从串口输出第1个字的第二字节。
  69.        out_R(&hanzi[0][i]); //从串口输出第1个字的第一字节。
  70.     out_R(&hanzi[1][i-1]); //从串口输出第2个字的第二字节
  71.        out_R(&hanzi[1][i]); //从串口输出第2个字的第一字节。
  72.     out_R(&hanzi[2][i-1]);
  73.        out_R(&hanzi[2][i]);
  74.     out_R(&hanzi[3][i-1]);
  75.     out_R(&hanzi[3][i]); [color=#008ef1]   [/color]
  76. }
  77. void out_R(unsigned char *d)//发送数据
  78. {  
  79.     TEMPR=*d;    
  80.      // G=1;                    //关闭红色
  81. for(a=0;a<8;a++)
  82.        {CLK=0;
  83.        // TEMPR<<a;   //取出最高位。
  84.            R=(TEMPR<<a)&0x80;;             //输出数据1[color=#008ef1]     [/color]
  85.                      //发送时钟
  86.        CLK=1;[color=#008ef1]  [/color][color=#008ef1]      [/color]
  87.       }
  88. }
  89. void out_G(unsigned char *d)//发送数据
  90. {   unsigned char i,TEMP;
  91.     bit e;
  92.     TEMP=*d;
  93.     R=1;                    //关闭红色
  94. for(i=0;i<8;i++)
  95.        {
  96.         e=(TEMP<<i)&0x80;   //取出最高位。
  97.         if(e==0)
  98.            G=0;
  99.      else
  100.           G=1;             //输出数据1
  101.        CLK=1;              //发送时钟
  102.        CLK=0;
  103.       }
  104. }
  105. unsigned char code hanzi[4][32]={   //二维数据
  106. 0xDF,0xFF,0xEC,0x03,0xEF,0xFB,0xBF,0xFB,0xBE,0xFB,0xBE,0xFB,0xBE,0xFB,0xBE,0xFB,
  107. 0xBD,0x7B,0xBD,0xBB,0xBB,0xDB,0xA7,0xDB,0xBF,0xFB,0xBF,0xFB,0xBF,0xEB,0xBF,0xF7,/*"闪",0*/
  108. 0xEF,0xF7,0xEF,0xC3,0xEC,0x3F,0xE9,0xDF,0xA5,0xDF,0xAD,0xDF,0xAC,0x01,0x6F,0xDF,
  109. 0xEF,0xDF,0xE7,0x57,0xDA,0x5B,0xDA,0xDD,0xBD,0xDD,0xBB,0xDF,0x7F,0x5F,0xFF,0xBF,/*"烁",1*/
  110. 0xFF,0xFB,0x80,0x01,0xDD,0xB7,0xED,0xB7,0xF5,0xAF,0xC0,0x01,0xDF,0xFF,0xDF,0xFF,
  111. 0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xDF,0xFF,0xBF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFF,/*"严",2*/
  112. 0xFE,0x0F,0xC0,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xE0,0x0F,0xEE,0xEF,0xE0,0x0F,
  113. 0xEE,0xEF,0xE0,0x0F,0xFE,0xFF,0xC0,0x07,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFF,0xFF,/*"重",3*/
  114. };




[ 此帖被chenppo在2013-10-19 12:07重新编辑 ]
本帖最近打赏记录:共1条打赏 ,专家+1
离线decai

发帖
799
M币
5781
专家
13
粉丝
149
只看该作者 1楼 发表于: 2013-10-19
请登录后查看
本帖最近打赏记录:共2条打赏 ,M币+5 ,专家+1
离线benli

发帖
33704
M币
6633
专家
91
粉丝
488
只看该作者 2楼 发表于: 2013-10-19
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+5
离线庄华

发帖
285
M币
456
专家
6
粉丝
19
只看该作者 3楼 发表于: 2013-10-19
请登录后查看
离线benli

发帖
33704
M币
6633
专家
91
粉丝
488
只看该作者 4楼 发表于: 2013-10-19
回 3楼(庄华) 的帖子
请登录后查看
离线庄华

发帖
285
M币
456
专家
6
粉丝
19
只看该作者 5楼 发表于: 2013-10-19
请登录后查看
本帖最近打赏记录:共1条打赏 ,M币+5
离线庄华

发帖
285
M币
456
专家
6
粉丝
19
只看该作者 6楼 发表于: 2013-10-19
回 3楼(庄华) 的帖子
请登录后查看
离线庄华

发帖
285
M币
456
专家
6
粉丝
19
只看该作者 7楼 发表于: 2013-10-20
回 6楼(庄华) 的帖子
请登录后查看
离线benli

发帖
33704
M币
6633
专家
91
粉丝
488
只看该作者 8楼 发表于: 2013-10-20
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个