- 打卡等级:偶尔看看III
- 打卡总天数:55
- 最近打卡:2025-05-02 07:32:08
已绑定手机
中级会员
- 积分
- 315
|
发表于 2025-4-2 21:54:52
|
显示全部楼层
第九集
发现一个问题,根据芯片手册里面添加了一串代码在编译器里面之后会导致取余计算处理不了,会卡住 ---REMOVEUNUSED 这串符号一定不要添加,添加之后会导致取余没法运算。
smg.c
#include "smg.h"
//标准字库
u8 t_display[]=
{
0x3F, /*'0', 0*/
0x06, /*'1', 1*/
0x5B, /*'2', 2*/
0x4F, /*'3', 3*/
0x66, /*'4', 4*/
0x6D, /*'5', 5*/
0x7D, /*'6', 6*/
0x07, /*'7', 7*/
0x7F, /*'8', 8*/
0x6F, /*'9', 9*/
0x77, /*'A', 10*/
0x7C, /*'B', 11*/
0x39, /*'C', 12*/
0x5E, /*'D', 13*/
0x79, /*'E', 14*/
0x71, /*'F', 15*/
0x40, /*'-', 16*/
0x00, /*' ', 17*/
0x80, /*'.', 18*/
};
u8 T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
void Send_595(u8 dat)
{
u8 i;
for(i=0; i<8; i++)
{
dat <<= 1; //DAT = (DAT<<1)
P_HC595_SER = CY; //数据写到引脚上
P_HC595_SRCLK = 1; //输出上升沿时钟信号
P_HC595_SRCLK = 0; //将时钟信号拉低,预备下次拉高
}
}
void Display_SMG(u8 HC595_1,u8 HC595_2)
{
Send_595(HC595_1); //输出段码 高电平点亮
Send_595(HC595_2); //输出位码 低电平点亮
P_HC595_RCLK = 1;
P_HC595_RCLK = 0;
}
u8 SMG_no = 0;
u8 shi=0;
u8 fen=0;
u8 miao=0;
void Display_Time(void)
{
miao++;
if(miao>59)
{
miao=0;
fen++;
if(fen>59)
{
fen=0;
shi++;
if(shi>23)
shi=0;
}
}
}
void SMG_Task(void)
{
u8 num = 0;
if(SMG_no ==0)
{
num = shi/10;
Display_SMG( t_display[num],~T_COM[0]);
}
else if(SMG_no ==1)
{
num = shi%10;
Display_SMG( t_display[num],~T_COM[1]);
}
else if(SMG_no ==2)
{
Display_SMG( t_display[16],~T_COM[2]);
}
else if(SMG_no ==3)
{
num = fen/10;
Display_SMG( t_display[num],~T_COM[3]);
}
else if(SMG_no ==4)
{
num = fen%10;
Display_SMG( t_display[num],~T_COM[4]);
}
else if(SMG_no ==5)
{
Display_SMG( t_display[16],~T_COM[5]);
}
else if(SMG_no ==6)
{
num = miao/10;
Display_SMG( t_display[num],~T_COM[6]);
}
else if(SMG_no ==7)
{
num = miao%10;
Display_SMG( t_display[num],~T_COM[7]);
}
else
{
}
SMG_no ++ ;
if(SMG_no >7)
SMG_no =0;
}
u8 state_now = 0;
void PLED_40(void)
{
u8 cod[8];
cod[0] =0x0f;
cod[1] =0xfe;
cod[2] =0xfe;
cod[3] =~T_COM[state_now];
cod[4] =0xfe;
LED40_SendData(cod,5);
P2 = ~T_COM[state_now];
state_now++;
if(state_now>7)
state_now=0;
}
void SMG_PC(void)
{
u8 cod[8];
cod[0] = t_display[shi/10];
cod[1] = t_display[shi%10];
cod[2] = t_display[16];
cod[3] = t_display[fen/10];
cod[4] = t_display[fen%10];
cod[5] = t_display[16];
cod[6] = t_display[miao/10];
cod[7] = t_display[miao%10];
SEG7_ShowCode(cod);
}
smg.h
#ifndef __smg_H
#define __smg_H
#include "public.h"
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
//u8 t_display[];
//u8 T_COM[];
//u8 Seg_no=0;
void Send_595(u8 dat);
void Display_SMG(u8 HC595_1,u8 HC595_2);
void SMG_Task(void);
void Display_Time(void);
void PLED_40(void);
void SMG_PC(void);
#endif
|
|