打印
[51单片机]

74HC595驱动问题!!

[复制链接]
1337|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2083759|  楼主 | 2016-12-4 08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先上代码:

#include <STC15F2K60S2.H>
#include "intrins.h"

// LED字模表
unsigned char code LED_0F[] =
{// 0     1      2       3    4     5      6       7    8     9      A       b    C    d      E    F    -
    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};

//-----------------------------------------------------------------------------
// 函数原形定义
#define uchar unsigned char

void main (void);                    // 主函数
void LED4_Display (void);            // LED显示
void LED_OUT(uchar X);                // LED单字节串行移位函数
        
uchar xs,haom,hm;
unsigned int num;
sbit DIO = P3^4;                //串行数据输入
sbit RCLK  = P3^3;                //时钟脉冲信号——上升沿有效
sbit SCLK = P3^2;                //打入信号————上升沿有效

//-----------------------------------------------------------------------------
// 全局变量
uchar LED[8];    //用于LED的8位显示缓存

void Timer0Init(void)        //5毫秒@6.000MHz
{
    AUXR |= 0x80;        //定时器时钟1T模式
    TMOD &= 0xF0;        //设置定时器模式
    TL0 = 0xD0;        //设置定时初值
    TH0 = 0x8A;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
    ET0=1;
    EA=1;
}
//*****************************************************************************
// 主程序
//
void main (void)
{


    Timer0Init();   
    while(1)
    {
   
    }
}
                           
void LED4_Display (void)
{
   
    uchar qian,bai,shi,ge;

     qian=num%10000/1000;
    bai=num%1000/100;
    shi=num%100/10;
    ge=num%10;

     switch(xs)
     {
         
           case 0:
                    //显示第1位
                    LED_OUT(LED_0F[ge]);   
                    LED_OUT(0x01);        
               
                    RCLK = 0;
                    RCLK = 1;
                   xs=1;
                         break;
           case 1:
                    //显示第2位                    
                    LED_OUT(LED_0F[shi]);   
                    LED_OUT(0x02);        
               
                    RCLK = 0;
                    RCLK = 1;
                   xs=2;
                   break;
           case 2:
                    //显示第3位
                    LED_OUT(LED_0F[bai]);            
                    LED_OUT(0x04);   
               
                    RCLK = 0;
                    RCLK = 1;
                   xs=3;
                   break;
           case 3:
                    //显示第4位               
                    LED_OUT(LED_0F[qian]);            
                    LED_OUT(0x08);        
                                               
                    RCLK = 0;
                    RCLK = 1;
                   xs=0;
                   break;
     }





}

void LED_OUT(uchar X)
{
    uchar i;
    for(i=8;i>=1;i--)
    {
        if (X&0x80) DIO=1; else DIO=0;
        X<<=1;
        SCLK = 0;
        SCLK = 1;
    }
}

void tm0_isr() interrupt 1 using 1
{
    LED4_Display ();
    haom++;   
    if(haom==200)
    {  
        num++;  haom=0;
       hm=~hm;
    }
}

现在是》显示第1位,也就是“ge”一直是0,其他位正常,如果把其他位的数据也换成“ge”就两位都可以正常显示,不知道哪出问题啊?

相关帖子

沙发
2083759|  楼主 | 2016-12-4 08:52 | 只看该作者
把    //显示第1位  改成以下就显示正常,这是什么问题啊??
       case 0:
                    //显示第1位
                    LED_OUT(LED_0F[ge]);   
                    LED_OUT(0x01);        
               
                    RCLK = 0;
                    RCLK = 1;
                    LED_OUT(LED_0F[ge]);   
                    LED_OUT(0x01);        
               
                    RCLK = 0;
                    RCLK = 1;
                   xs=1;
                   break;

使用特权

评论回复
板凳
2083759|  楼主 | 2016-12-4 09:16 | 只看该作者
现在把“ge”改成全局变量就可以了,这是什么情况????

使用特权

评论回复
地板
chuangbao| | 2016-12-4 17:49 | 只看该作者
这写法好奇怪。。。。

使用特权

评论回复
5
songchenping| | 2016-12-5 08:35 | 只看该作者
这种逻辑芯片,如果严格按照datasheet上的时序图来操作的话,根本就不应该出问题啊。

使用特权

评论回复
6
李不走寻常路| | 2016-12-5 08:36 | 只看该作者
不知道您注意到了没有,您的程序里没有考虑数码管消隐的问题,不考虑的话会影响显示的。

使用特权

评论回复
7
123654789| | 2016-12-5 10:06 | 只看该作者
本帖最后由 123654789 于 2016-12-5 11:13 编辑

这些问题太简单了。

使用特权

评论回复
8
123654789| | 2016-12-5 10:07 | 只看该作者
你多少个 74HC595 ??

使用特权

评论回复
9
123654789| | 2016-12-5 10:36 | 只看该作者
是不是4个 74HC595 ??

使用特权

评论回复
10
ningling_21| | 2016-12-5 11:01 | 只看该作者
123654789 发表于 2016-12-5 10:36
是不是4个 74HC595 ??

肯定是2片595

使用特权

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

本版积分规则

18

主题

79

帖子

2

粉丝