|
最近用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();
}
}
|
|