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.51hei.com/bbs/) | Powered by Discuz! X3.1 |