- 打卡等级:常住居民I
- 打卡总天数:79
- 最近打卡:2025-06-27 11:33:21
已绑定手机
中级会员
- 积分
- 407
|
发表于 2025-3-8 23:51:11
|
显示全部楼层
研究了一下板子的接线和冲哥的课程已经有很大的差别了。。
1.2板的数码管是用2个74hc595驱动的。冲哥的程序运行不了。
可以看出,3.2,3.4,3.5脚分别是数据的sck,rck,data.
/************* IO口定义 **************/
sbit P_HC595_SER = P3^4; //pin 14 SER data input
sbit P_HC595_RCLK = P3^5; //pin 12 RCLk store (latch) clock锁存器
sbit P_HC595_SRCLK = P3^2; //pin 11 SRCLK Shift data clock寄存器
向74hc595发送数据的函数,可以看出是一个16位的字节,前8位是并行输出,后8位
是串行输出,通过595的和第9脚输出,所以还要一个595进行解码。本板中并行输出码
为位码,串行输出码为段码。发送时是先送段码,后发送位码,说明是段码8位是串行,位码8位后发是并行。
void Send_595(u8 dat)
{
u8 i;
for(i=0; i<8; i++)
{
dat <<= 1;
P_HC595_SER = CY;//单片机CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,
加法运算中有进位或减法运算中有借位则CY位置1,否则为0。CY位是累加器的进位、借位标志。
对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。
P_HC595_SRCLK = 1;
P_HC595_SRCLK = 0;
}
/********************** 显示扫描函数 ************************/
void DisplayScan(void)
{
Send_595(t_display[LED8[display_index]]); //输出段码
Send_595(~T_COM[display_index]); //输出位码
P_HC595_RCLK = 1;
P_HC595_RCLK = 0;
if(++display_index >= 8) display_index = 0; //8位结束回0
}
|
|