找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1773|回复: 4
打印 上一主题 下一主题
收起左侧

Proteus仿真单片机+点阵屏漏点问题 附程序

[复制链接]
跳转到指定楼层
楼主
点阵屏的原始最少刷新时间为1ms
就算改到10us也依然漏点

代码设3ms刷新

代码设300ms刷新





单片机代码如下
  1. #include <STC89C5xRC.H>//Code:8k        Ram:512        xdata:256        EEProm:5k        Addr:0x2000

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535
  4. u16 TMR_00_OT;
  5. u16 TMR_01_OT;

  6. unsigned char code Test[]={
  7.         0x80,0x00,0x88,0x00,0x88,0x00,0x88,0x00,0xfc,0x3f,0x84,0x00,0x82,0x00,0x81,0x00,
  8.         0x80,0x00,0xfc,0x1f,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xff,0x7f,0x00,0x00, // 生
  9.         0x00,0x00,0xf8,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x0f,
  10.         0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x0f,0x08,0x08, // 日
  11.         0x08,0x02,0x08,0x02,0x08,0x02,0xc8,0x1f,0x18,0x12,0x2a,0x12,0x0a,0x12,0x0a,0x12,
  12.         0xe9,0x7f,0x08,0x02,0x08,0x05,0x08,0x05,0x88,0x08,0x88,0x08,0x48,0x10,0x28,0x60, // 快
  13.         0x00,0x04,0x00,0x0f,0xf8,0x00,0x08,0x00,0x88,0x00,0x84,0x00,0x84,0x00,0xfc,0x3f,
  14.         0x80,0x00,0x90,0x04,0x90,0x08,0x88,0x10,0x84,0x20,0x82,0x20,0xa0,0x00,0x40,0x00, // 乐
  15. };
  16. void Timer1Init(void)
  17. {
  18.     //AUXR |= 0x40;                //定时器时钟1T模式
  19.     TMOD &= 0x0F;                //设置定时器模式
  20.     TMOD |= 0x10;                //设置定时器模式
  21.                 TL1 = 0x18;                //设置定时初始值1ms@12.000MHz 12T
  22.                 TH1 = 0xFC;                //设置定时初始值1ms@12.000MHz 12T
  23.     TF1 = 0;                //清除TF0标志
  24.     TR1 = 1;                //定时器0开始计时
  25. }
  26. void timer1_int (void) interrupt 3
  27. {
  28.                 TL1 = 0x18;                //设置定时初始值1ms@12.000MHz 12T
  29.                 TH1 = 0xFC;                //设置定时初始值1ms@12.000MHz 12T
  30.                 if(TMR_00_OT)TMR_00_OT--;
  31.                 if(TMR_01_OT)TMR_01_OT--;
  32. }
  33. void Sys_Init(void)
  34. {
  35.     ET1 = 1;                        //Timer1 interrupt Enable
  36.     EA = 1;                                //All interrupt Enable
  37.                 TMR_00_OT=0;
  38.         TMR_01_OT=6000;
  39. }
  40. void main()
  41. {
  42.                 u8 i=0, j=0;
  43.     Timer1Init();
  44.     Sys_Init();
  45.     while (1)
  46.     {
  47.                                         if(!TMR_00_OT)
  48.                                         {TMR_00_OT=300;//<span style="background-color: rgb(255, 255, 255);">刷新时间,单位ms</span>
  49.                                                 P3=Test[i+1+j*32];
  50.                                                 P1=Test[i+j*32];
  51.                                                 P0 = (~((u16)1<<(i/2)))%256;
  52.                                                 P2 = (~((u16)1<<(i/2)))/256;
  53.                                                         i+=2;
  54.                                                 if(i>30)i=0;
  55.                                         }
  56.                                         if(!TMR_01_OT)
  57.                                         {TMR_01_OT=6000;
  58.                                                 //j++;
  59.                                                 if(j>3)j=0;
  60.                                         }
  61.                                        
  62.     }
  63. }
复制代码


怎么破?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:955689 发表于 2021-7-31 08:42 | 只看该作者
看下漏点的信号在哪个阵列。
回复

使用道具 举报

板凳
ID:161164 发表于 2021-7-31 09:10 | 只看该作者
cumtgao 发表于 2021-7-31 08:42
看下漏点的信号在哪个阵列。

低速时没有漏点(如300ms)
回复

使用道具 举报

地板
ID:332444 发表于 2021-7-31 10:08 | 只看该作者
回复

使用道具 举报

5#
ID:161164 发表于 2021-9-1 15:50 | 只看该作者
原来是没有消隐
改一下XY的排序就好了
  1. P0 = (~((u16)1<<(i/2)))%256;
  2. P2 = (~((u16)1<<(i/2)))/256;
  3. P3=Test[i+1+j*32];
  4. P1=Test[i+j*32];
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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