找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机驱动8*8点阵显示出现错误

查看数: 2973 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-2-8 21:42

正文摘要:

又来写一遍,好烦啊。大家可以看一下图片和程序,按照正常的思路数字“0”在8*8点阵第一行应该是0x00,第二行应该是0x18,我按照这种思路用delay函数写过一遍结果是正常的,用定时器就出现上面这中情况,先谢谢大家了 ...

回复

ID:111634 发表于 2018-2-17 19:03
板凳说得有理:还是回去多看看书先吧 尤其是中断部分
ID:272269 发表于 2018-2-17 01:35
你的t呢????
TMOD=0x01
你的属于t0的定时器的中断函数呢????

改过来

上面的定时器初始化
EA=1;ET0=1;
t0的中断函数
void t0()interrupt 1
{
   TR0=0;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   a++;
   if(a==10)
   {
       a=0;
       j++;
       if(j==3)
           j=0;
   }
   TR1=1;               
   
}

大哥还是回去多看看书先吧
尤其是中断部分
ID:284230 发表于 2018-2-16 21:36
1 把输出语句放到时间标识内,
2 增加消隐处理。
3 更新的速度不能太快,一般在100Hz左右就可以了。

#include<reg52.h>
unsigned char lie[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char hang[3][8]={0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00, //数字0
                          0x00,0x3c,0x20,0x38,0x04,0x24,0x38,0x00, //数字5
                          0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}; //数字8
int  a,i,j;
void main()
{
  TMOD=0x01;
  TH0=(65536-5000)/256;        
  TL0=(65536-5000)%256;
  TR0=1;
  while(1)
  {

         if(TF0==1)
         {
                P1=0xff;
                P2=hang[j][i];
                P1=lie[i];

                i++;
                if(i==8)
                {
                        i=0;
                }
               
                TF0=0;
                a++;
                         
                if(a==100)
                {
                        a=0;
                        j++;

                        if(j==3)
                        {
                                j=0;
                        }
                }
     }
  }
}

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

Powered by 单片机教程网

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