最近用TM1620驱动数码管,但是无论程序怎么写都没有对应输出,很迷茫。我的接线和说明说上的总线式的接发不一样,想问一下是不是这个原因导致的?
对应程序如下:
/**
TM1620驱动共阴极数码管模块
**/
#include <reg52.h>
#include <intrins.h>
#include "tm1620.h"
/**
宏定义命令字
**/
#define setDispMode 0x02 //驱动6位8段数码管,实际驱动4位8段
#define setAddrMode 0x44 //地址增加模式为 固定模式
#define setOff 0x80 //显示关
#define setOn 0x8f //显示开,此时占空比最高14/16
//定义地址宏
#define addr_00H 0xc0
sbit din = P2^2;
sbit clk = P2^1;
sbit stb = P2^0;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void sendDataToTM1620(unsigned char sdata){
//在时钟的上升沿进行移位写入,低位先传
unsigned char a;
for(a=0;a<8;a++){
if(sdata&0x01)
din = 1;
else
din = 0;
sdata >>= 1;
clk = 0;
_nop_();
_nop_();
clk = 1;
}
}
/**
初始化串口
**/
void initialTM1620(){
unsigned char i;
stb = 1;
_nop_();
_nop_();
stb = 0;
sendDataToTM1620(setDispMode);//4位8段
stb = 1;
_nop_();
_nop_();
stb = 0;
sendDataToTM1620(setAddrMode);//固定地址
clk = 1;
//地址数据清零
for(i=0;i<12;i++){
stb = 1;
_nop_();
stb = 0;
sendDataToTM1620(0xc0 + i);//设置地址
sendDataToTM1620(0x00);
}
//设置亮度和开关
stb = 1;
_nop_();
_nop_();
stb = 0;
sendDataToTM1620(setOn);
}
/**
display
**/
void display(){
unsigned char numArr[4],i;
numArr[0] = num/1000;
numArr[1] = num%1000/100;
numArr[2] = num%1000%100/10;
numArr[3] = num%1000%100%10;
for(i=0;i<4;i++){
stb = 1;
_nop_();
stb = 0;
sendDataToTM1620(addr_00H + i*2);
sendDataToTM1620(addr_00H);
sendDataToTM1620(0x3f);
//}
//设置亮度和开关
stb = 1;
_nop_();
_nop_();
stb = 0;
sendDataToTM1620(setOn);
}
void main(){
initialTM1620();
while(1)
{
display();
}
}
|