51hei截圖_20231012193523.png (111.6 KB, 下載次數: 91)
74HC595級聯
dj3365191 發表于 2023-10-13 10:06
東軟的軟件是什么軟件?
xianfajushi 發表于 2023-10-13 14:04
代碼中用發送8個數據為一次,發送16個數據分為2次發送8個數據即可。
aide51 發表于 2023-10-13 12:26
這個軟件還真沒用過,不過數碼管顯示亂,可能是引腳和程序不對,數碼管真值不對等等,要先查查硬件電路
1.png (19.63 KB, 下載次數: 86)
xianfajushi 發表于 2023-10-13 17:12
我今天回復了個挺好玩的16燈逐一點亮,注意代碼中的10和18的值,讓大家娛樂鑒賞,電路圖就不提供了吖,其實 ...
殿堂之上 發表于 2023-10-14 09:52
這個SY,MY好像都沒啥作用啊
zhuls 發表于 2023-10-13 17:06
595的SDA數據是在SCK的上升沿才鎖存的,所以,你把SMG_Write_Byte 中的SCL=1;SCL=0調一下?
//595送出串 ...
數碼管顯示亂碼,幫忙分析下原因: #include "Led_Display.h" //#include"smg.h" #include <hic.h> #include "delay.h" const char smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽 //u16 smgduan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽 //u16 smgduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰 u8 DisPlayData[8]; u16 count; u16 sec,min,hour; //sbit SCL = (PA1);//時鐘脈沖信號——上升沿有效ST //sbit RCL = (PA3);//打入信號————上升沿有效SH //sbit DIO = (PA5);//串行數據入DS............... /************************************************************************************** **** **** **** **** ***************************************************************************************/ void Smg_Init( ) { ANSL = 0xFF; //選擇對應端口為數字IO功能 ANSH = 0xFF; //選擇對應端口為數字IO功能 PAT = 0x00; //所有IO設為輸出低電平 PBT = 0x00; PCT = 0x00; PA = 0x00; PB = 0x00; PC = 0x00; //PB6=0; } /************************************************************************************************* ****函數名: SMG_Write_Bite (u8 dat,u8 dat1) ****功能 寫入數據 **** **** ***************************************************************************************************/ void SMG_Write_Byte (u8 dat,u8 dat1) { u8 i; for(i=0;i<8;i++) { //((dat<<i)&0x80)? DIO_HIGH:DIO_LOW; // 三目運算 if((dat<<i)&0x80) { DIO=1; } else { DIO=0; } //SCL_HIGH; //SCL_LOW; SCL=1; //delay_us(10); //delay_ms(1); //delay(1); SCL=0; } for(i=0;i<8;i++) { //((dat1<<i)&0x80)? DIO_HIGH:DIO_LOW; // 三目運算 //SCL_HIGH; //SCL_LOW; if((dat1<<i)&0x80)//這個原寫成dat,修改成dat1; { DIO=1; } else { DIO=0; } SCL=1; SCL=0; } //RCL_HIGH; //RCL_LOW; RCL=1; RCL=0; } void SMG_Number (u16 sec,u16 count) { { SMG_Write_Byte (smgduan[((sec%1000)%100)%10],0x01);//數碼管顯示公式進行了更改 delay(1); SMG_Write_Byte (smgduan[((sec%1000)%100)/10],0x02); delay(1); SMG_Write_Byte (smgduan[(sec%1000)/100],0x04); delay(1); SMG_Write_Byte (smgduan[sec/1000],0x08); delay(1); } // if(sec>4500) // { // count++; // if(count>9999) // { // count=0; // } // } // SMG_Write_Byte (smgduan[((count%1000)%100)%10],0x10); // SMG_Write_Byte (smgduan[(hour%100)%10],0x10); // delay(1); // SMG_Write_Byte (smgduan[((count%1000)%100)/10],0x20); // SMG_Write_Byte (smgduan[(hour%100)/10],0x20); // delay(1); // SMG_Write_Byte (smgduan[(count%1000)/100],0x40); // SMG_Write_Byte (smgduan[hour/100],0x40); // delay(1); // SMG_Write_Byte (smgduan[count],0x80); // delay(1); } #ifndef _LED_DISPLAY_H #define _LED_DISPLAY_H #include <hic.h> #include "typedef.h" #define SCL (PA0)//時鐘脈沖信號——上升沿有效ST #define RCL (PA6)//打入信號————上升沿有效SH #define DIO (PA7)//串行數據入DS............... //typedef unsigned char u8; //typedef unsigned int u16; //typedef unsigned long u32; void Smg_Init( void); void SMG_Number (u16 sec,u16 count); void SMG_Write_Byte (u8 dat,u8 dat1); //typedef uint8_t u8; #endif /*sample.c*/ #include <hic.h> #include "Led_Display.h" #include "delay.h" /****************************************************** 函數名:void RAMclear(void) 描 述:RAM區數據清零,RAM區地址0x0000~0x03FF 輸入值:無 輸出值:無 返回值:無 *******************************************************/ void RAMclear(void) { for (IAAH=0; IAAH<=0x03; IAAH++) { for (IAAL=0; IAAL<0xFF; IAAL++) IAD = 0x00; IAD = 0x00; } } void main() { Smg_Init( ); //SMG_Number(1000,1000); while(1) {SMG_Number(1000,1000); //SMG_Number(1000,1000); //delay_ms(500); PB6=0; //delay_ms(500); delay(100); PB6=1; delay(100); } } //結果更改成這樣之后,數碼管顯示正常,完全OK |
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |