微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管显示不全

数码管显示不全

时间:10-02 整理:3721RD 点击:
下面是程序,烧到51单片机里时,数码管显示不全,而且显示的也不是预期设置的,帮帮忙
# include <reg51.h>
sbit DIO = P0^1;        //串行数据输入
sbit RCLK = P0^2;        //时钟脉冲信号
sbit SCLK = P0^3;        //打入信号
unsigned char seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //共阳段码
unsigned char wei[] = {0x01,0x02,0x04,0x08};        //位码
unsigned char num[] = {4,3,2,1};
unsigned char a1;
unsigned char add;
//延时函数(毫秒)
void delay_ms(unsigned int delaytime)
{
        unsigned int i,j;
        for (i=0;i<delaytime;i++)
        for (j=0;j<125;j++);
}
//数据传送函数(位码,段码)
void send_595_data (unsigned char send_address, unsigned char send_data)
{
        unsigned char i,j,temp0,temp1;
        temp0 = send_address;
        temp1 = send_data;
        if (a1==2)        //加小数点
        {
                if (add < 300)
                        temp1 &= 0x7F;
        }
        for (i=0;i<4;i++)        //传送位码
        {
                if (temp0 & 0x80)
                        DIO = 1;
                else
                        DIO = 0;
                temp0 <<= 1;
                RCLK = 0;
                RCLK = 1;
        }
        for (i=0;i<4;i++)        //传送段码
        {
                if (temp1 & 0x80)
                        DIO = 1;
                else
                        DIO = 0;
                temp0 <<= 1;
                RCLK = 0;
                RCLK = 1;
        }
        SCLK = 0;
        SCLK = 1;        //产生上升沿,数据移位并行输出
        SCLK = 0;
}

//主函数
void main (void)
{
        for (;;)
        {
                for (a1 = 0;a1 < 4;a1++)
                {
                        send_595_data (~wei[4-a1],seg[num[a1]]);
                }
                add++;
                if (add == 600)
                        add = 0;
        }
}
数码管驱动原理图看下面


看我的帖子

怎么没人啊

这段程序是你改动过的还是商家发给你的?我只能告诉你程序里有错!程序里有错!程序里有错!

呵呵,简单到不能再复杂了

改动过的                              

那怎么回事,要怎么该

那就是了,是你改动的错误!

但是编译可以通过,能说下怎么改吗

当然可以了,不过要你发来原来的程序我好对比着讲给你听。

#include <reg52.h>   
sbit ser=P1^0;
sbit rck=P1^2;
sbit sck=P1^1;   
unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码
unsigned char no[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  //位码
unsigned char num[8]={2,0,1,2,0,7,1,3};  //显示2012.07.13
unsigned char al;
unsigned int add;   
/******************************************************************************   * *         
延时函数 *
******************************************************************************/  
/* 延时t毫秒 */  
void delay_ms(unsigned int delaytime)
{   
        unsigned int i,j;   
        for(i=0;i<delaytime;i++)      
        for(j=0;j<125;j++); /* 对于11.0592M时钟,约延时1ms */ }   /******************************************************************************  * *           
联级595数据传送函数 *           
传送格式(位码,段码) *  ******************************************************************************/
void send_595_data(unsigned char send_address,unsigned char send_data)
{   
        unsigned char i,j,temp0,temp1;   
        temp0=send_address;   
        temp1=send_data;
          if((al==3)||(al==5))  //加小数点  
        {        
                if(add<300)      
                temp1&=0x7f;  
        }   
        for(i=0;i<8;i++)   //传送位码   
        {        
                if(temp0&0x80)      
                        ser=1;   
                else      
                        ser=0;   
                temp0<<=1;   
                rck=0;   
                rck=1;     
        }     
        for(j=0;j<8;j++)  //传送段码     
        {        
                if(temp1&0x80)      
                        ser=1;           
                else      
                        ser=0;   
                temp1<<=1;   
                rck=0;   
                rck=1;     
        }   
        sck=0;   
        sck=1;  //产生上升沿,数据移位并行输出  
        sck=0; }   
/******************************************************************************  *
*           主函数 *  ******************************************************************************/
void main(void)
{     
        for(;;)   
        {
                    for(al=0;al<8;al++)  
                {   
                        send_595_data(~no[7-al],seg[num[al]]);  //显示2012.07.13  }  
                        add++;  if(add==600)   
                        add=0;   
                }
        }
}
这个就是了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top