打印
[51单片机]

初学者求助关于一个在led点阵上定时切换数字的问题

[复制链接]
609|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蛋蛋和淡淡|  楼主 | 2017-4-27 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我的代码:
#include <reg51.h>
#include <intrins.h>
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit key=P3^2;
code char LEDduan[]={
                     0x00,0x00,0x7e,0x42,0x42,0x7e,0x00,0x00,    //显示0;
                     0x00,0x00,0x40,0x40,0x40,0x7e,0x00,0x00};  //显示1 ;                 
code char LEDwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 count=0,k=0;
void delay(u8 t)
{
   u8 i,j;
   for(i=t;i>0;i--)
    for(j=200;j>0;j--);
}
void LED74HC595(u8 dat)
{
    u8 i;
    SRCLK=0;
        RCLK=0;
        for(i=0;i<8;i++)
        {
           SER=dat&0x80;                           //取出最高位;
           dat<<=1;                                   //取出次高位;
           SRCLK=1;                                  //数据向高位移动;
           _nop_();
           SRCLK=0;
        }
    RCLK=1;
        _nop_();
        RCLK=0;           //保存数据;
}
void LEDdisplay()
{
   u8 i,j=0;   
   for(i=k;i<8+k;i++)                   //K为切换数字用;
   {
                             
         P0=LEDwei[j++];             //位选;
         LED74HC595(LEDduan[i]);         //段选;
         delay(2);
         LED74HC595(0x00);                 //消影;
                                         
   }
}
void zd()
{
  TMOD|=0x01;
  TH0=0x3c;
  TL0=0xb0;                                                  //定时函数;
  ET0=1;
  EA=1;
  TR0=1;
}
void main()
{
  zd();
  while(1)
  {
         LEDdisplay();
          
  }
}
void time()interrupt 1
{
  TH0=0x3c;
  TL0=0xb0;
  count++;                                                       
  if(count==20)                                                //定时1S;
  {          
       count=0;
       k=k+8;
  }
  if(k>8)k=0;
}       
板子上LED点阵用的74HC595芯片来实现扫描,此代码能实现数字转换功能,但有瑕疵;就是在0到1转换的瞬间其余的灯会闪烁一下熄灭,然后再显示1,问了其他人说是余辉现象,可是我已经消影了还有这种现象,但是1转换到0又没有这种现象;想了好久没结果,希望大虾给我提一提或是有另外能实现定时转换数字的代码,谢谢;

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

3

帖子

0

粉丝