请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3077|回复: 1

LED点阵显示的字总是闪

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2020-7-30 15:58:01 | 显示全部楼层 |阅读模式
1金钱
LED点阵显示的字总是闪,延时函数从2个机器周期开始一点点大,大到几十毫秒都是闪,请大神指点指点


#include<reg52.h>
#include<intrins.h>

sbit D = P3^4;
sbit PI = P3^5;
sbit H = P3^6;





void delay10us(void)   //误差 -0.234375us
{
    unsigned char a;
    for(a=1;a>0;a--);
}

void delay20us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=7;a>0;a--);
}

void ys(unsigned int a)
{
  while(a--);
}

void delay1ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=1;b>0;b--)
            for(a=1;a>0;a--);
}

void delay500ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=23;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
}

void delay4us(void)   //误差 -0.744791666667us
{
    _nop_();  //if Keil,require use intrins.h
}


void hs595(unsigned char l2,unsigned char l1,unsigned char h2,unsigned char h1)
{
     unsigned char a;
     for(a=0;a<8;a++)
         {
           H = 0;
           delay20us();
           D = l2>>7;
           l2<<=1;
          delay20us();
          H = 1;
          delay20us();
          
         }
         for(a=0;a<8;a++)
         {
           H = 0;
           delay20us();
           D = l1>>7;
           l1<<=1;
          delay20us();
          H = 1;
          delay20us();
          
         }
         for(a=0;a<8;a++)
         {
           H = 0;
           delay20us();
           D = h2>>7;
           h2<<=1;
          delay20us();
          H = 1;
          delay20us();
          
         }
         for(a=0;a<8;a++)
         {
           H = 0;
           delay20us();
           D = h1>>7;
           h1<<=1;
          delay20us();
          H = 1;
          delay20us();
          
         }
        PI = 1;
         delay20us();
         PI = 0;
}

unsigned char code w[]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
};


unsigned char code hz1[]=
{
   /*--  文字:  普  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,
};

unsigned char code hz2[]=
{
  /*--  文字:  中  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x0F,0x00,0x00,0x00,
};

void main()
{
  unsigned char c,d;

  while(1)
   {
                    while(1)
                 {
             for(c=0;c<16;c++)
                   {
                             hs595(~w[c+16],~w[c],hz1[16+c],hz1[c]);
                        // delay4us();
                         // delay20us();
                         //delay1ms();
                        delay1ms();delay1ms();delay1ms();
                   }
                  
                  }
       
                 
          }
}
我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

0

主题

5

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2020-8-3 17:48:16 | 显示全部楼层
延时时间改短点
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 04:09 , Processed in 0.088678 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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