[求助]高手們幫忙看下小程序為什么不能正常工作

  這是用一個430F147控制一個CH451驅動5個數碼管顯示的程序.看DIN和DCLK波形是對的,但是不管我輸入多少都是經常顯示"8.8.8.8.8"或者其他亂碼,而且閃爍得厲害,調試了很長時間都沒有效果   大俠們幫幫忙,不盡感激! 下面是程序:

#include #define ch451_RESET 0x0201 //復位 #define ch451_LEFTMOV 0x0300 //設置移動方式-作移 #define ch451_LEFTCYC 0x0301 //設置移動方式-左循 #define ch451_RIGHTMOV 0x0302 //設置移動方式-右移 #define ch451_RIGHTCYC 0x0303 //設置移動方式-右循 #define ch451_SYSOFF 0x0400 //關顯示、鍵盤、看門狗 #define ch451_SYSON1 0x0401 //開顯示 #define ch451_SYSON2 0x0403 //開顯示、鍵盤 #define ch451_SYSON3 0x0407 //開顯示、鍵盤、看門狗功能 #define ch451_DSP 0x0500 //設置默認顯示方式 #define ch451_BCD 0x0580 //設置BCD譯碼方式 #define ch451_TWINKLE 0x0600 //設置閃爍控制 #define ch451_DIG0 0x0800 //數碼管位0顯示 #define ch451_DIG1 0x0900 //數碼管位1顯示 #define ch451_DIG2 0x0a00 //數碼管位2顯示 #define ch451_DIG3 0x0b00 //數碼管位3顯示 #define ch451_DIG4 0x0c00 //數碼管位4顯示 #define ch451_DIG5 0x0d00 //數碼管位5顯示 #define ch451_DIG6 0x0e00 //數碼管位6顯示 #define ch451_DIG7 0x0f00 //數碼管位7顯示 //***************************************** //須主程序定義的參數 // sbit ch451_din=P4^0; // 串行數據輸出,接CH451的數據輸入 // sbit ch451_dclk=P4^1; //串行數據時鐘上升延激活 // sbit ch451_load=P4^3; //串行命令加載,上升延激活 //****************************************** void ch451_init() { WDTCTL=WDTPW+WDTHOLD;//stop WDT P4DIR=0xff;//P4口設為輸出 P4OUT=0xff;//P4輸出為高電平 P4OUT&=0xfe;//0--->p4.0 P4OUT|=0x01;//1--->p4.0,DIN輸出低電平脈沖(拉低拉高) } //***************************************** void ch451_write(unsigned int command) { unsigned int i; P4OUT&=0xf7;//load1=0 for(i=0x001;i<=0x800;i=i<<1) { if(command&i) P4OUT|=0x01; else P4OUT&=0xfe; P4OUT&=0xfd; P4OUT|=0x02;//時鐘拉高拉低 } P4OUT|=0x08;//load1=1 } void main() { ch451_init(); while(1) { ch451_write(0x401);//設定系統(tǒng)參數,只啟動顯示掃描驅動功能 ch451_write(0x5d3);//設定顯示參數,譯碼方式、掃描極限為5,占空比為3 ch451_write(ch451_DIG0|0x81);//DIG0顯示1. for(int i=0;i<100;i++);//延時 ch451_write(ch451_DIG1|0x82);//DIG1顯示2. for(int i=0;i<100;i++); ch451_write(ch451_DIG2|0x83);//DIG2顯示3. for(int i=0;i<100;i++); ch451_write(ch451_DIG3|0x84);//DIG3顯示4. for(int i=0;i<100;i++); ch451_write(ch451_DIG4|0x85);//DIG4顯示5. for(int i=0;i<100;i++); } }

void ch451_write(unsigned int command) { unsigned int i; P4OUT&=0xf7;//load1=0 delay2us(); for(i=0x001;i<=0x800;i=i<<1) { if(command&i) P4OUT|=0x01; else P4OUT&=0xfe; delay2us(); P4OUT&=0xfd; delay2us(); P4OUT|=0x02;//時鐘拉高拉低 } delay2us(); P4OUT|=0x08;//load1=1 } 加點延時試試看。


謝謝! 試過加長延時 但只能讓數碼管不閃爍,顯示還是不對


451的GND腳多并接幾根線到地試試看呢。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频