中颖单片机关于TM1629B的LED驱动编程,烧录成功,但是LED没有点亮,板没有问题,下附有程序代码

2019-07-15 08:48发布

第一次使用中颖单片机SH79F166A关于TM1629B的LED驱动编程,烧录成功,但是LED没有点亮,板没有问题,下附有程序代码一开始由于没有设置相关的端口为输出端口,导致数据无法输出,但是在设置了相应的端口寄存器之后,还是无法点亮LED



config.h:
#ifndef        _CONFIG_H
#define        _CONFIG_H


#include<SH79F166A.h>
#include<intrins.h>
#include<stdio.h>


typedef        unsigned         char uint8;
typedef        signed                char int8;
typedef        unsigned         int         uint16;
typedef        signed                 int         int16;


sbit        DIO=P3^7;
sbit        CLK=P3^6;
sbit        STB=P3^5;
sbit        SDA=P3^4;
sbit        SCL=P3^3;


#define        dissetmode        0x03        //显示模式设置
#define        WriteDataMode_Auto        0x40        //地址自动加1
#define StartAddr        0xC0
#define        Disp_ON                0x8F        //显示开关
#define        Disp_OFF        0x87
#define        Comm_Key        0x42
#define        DataCount        16       
#define        NOP                _nop_()


void        SystemInit();
void        LEDInit();
void        InData(uint8 p);
void        SelfCheck();
void        display(uint8        Data);
void        KeyScan();
uint8        OutData();


#endif


LED.c:
#include"config.h"


uint8 code        DigitLED[]=
{
        0x3F,                //0
        0x30,                //1
        0x5B,                //2
        0x4F,                //3
        0x66,                //4
        0x6D,                //5
        0x7D,                //6
        0x07,                //7
        0x7F,                //8
        0x6F                //9
};


void        InData(uint8 p)
{
   uint8 i;
   for(i=0;i<8;i++)
   {
           CLK=0;
        if((p&0x01)==0x01)
        {
                DIO=1;
        }
        else
        {
                DIO=0;
        }
        NOP;NOP;NOP;NOP;
        CLK=1;
        p=p>>1;
        NOP;NOP;NOP;NOP;
   }
}


uint8 OutData()
{
        uint8 i;
        uint8 ReadData;
        DIO=1;
        CLK=0;
        for(i=0;i<8;i++)
        {
                CLK=1;
                ReadData=ReadData>>1;
                if(DIO==0x01)
                {
                        ReadData=ReadData|0x80;
                }else
                {
                        ReadData=ReadData&0x7F;
                }
                CLK=0;
                NOP;NOP;
        }
        DIO=1;
        return ReadData;
}


void        LEDInit()
{       
        DIO=1;
        CLK=1;
        STB=1;
        NOP;
        STB=0;
        InData(WriteDataMode_Auto);
        STB=1;
        STB=0;
        InData(StartAddr);
}


void        SelfCheck()
{
        uint8 i;
        LEDInit();
        STB=0;
        for(i=0;i<10;i++)
        {
                InData(DigitLED);       
        }
        STB=1;
        NOP;NOP;NOP;
        STB=0;
        InData(Disp_ON);
        STB=1;
}


main.c:
#include"config.h"


void        main()
{
        SystemInit();
        while(1)
        {       
                //LEDInit();
                SelfCheck();
        }       
}


void SystemInit()
{
        INSCON&=(~(1<<6));
        P3CR=0xF8;
        P3PCR=0x0;
}





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。