第一次使用中颖单片机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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
从头理了一遍,把电路板引脚什么的都测了一遍,发现了一些问题,IC有些引脚没有导通。后面又用定时器分频的方式让输出端口显示正弦波,发现一切正常,难道是TM1629B的时序有问题?这时序看得不是很懂,也没感觉哪里有问题。。
一周热门 更多>