发现一个问题,根据芯片手册里面添加了一串代码在编译器里面之后会导致取余计算处理不了,会卡住 ---REMOVEUNUSED这串符号一定不要添加,添加之后会导致取余没法运算。
smg.c
#include "smg.h"
//标准字库
u8t_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*/
};
u8T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
void Send_595(u8 dat)
{
u8i;
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,~T_COM);
}
else if(SMG_no ==1)
{
num = shi%10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==2)
{
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==3)
{
num = fen/10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==4)
{
num = fen%10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==5)
{
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==6)
{
num = miao/10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==7)
{
num = miao%10;
Display_SMG( t_display,~T_COM);
}
else
{
}
SMG_no ++ ;
if(SMG_no >7)
SMG_no =0;
}
u8 state_now = 0;
void PLED_40(void)
{
u8 cod;
cod =0x0f;
cod =0xfe;
cod =0xfe;
cod =~T_COM;
cod =0xfe;
LED40_SendData(cod,5);
P2 = ~T_COM;
state_now++;
if(state_now>7)
state_now=0;
}
void SMG_PC(void)
{
u8 cod;
cod = t_display;
cod = t_display;
cod = t_display;
cod = t_display;
cod = t_display;
cod = t_display;
cod = t_display;
cod = t_display;
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
//u8t_display[];
//u8T_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
第九集 课后小练——简易10秒免单计数器
挺好玩的,总想按以下,
#include "smg.h"
//标准字库
u8t_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*/
};
u8T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码
void Send_595(u8 dat)
{
u8i;
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 key_Status=0;
u8 key_Count=0;
u16 key_Status_Count=0;
u16 miao=1000;
u16 ten_s=0;
void key_Init(void)
{
if(P33==0)
{
key_Count++;
if(key_Count==20)
{
key_Status++;
if(key_Status>3)
key_Status=0;
}
}
else
{
key_Count=0;
}
}
void Display_Time(void)
{
if(key_Status==1)
{
if(miao>0)
{
miao--;
}
else
{
key_Status=3;
miao=1000;
}
if(ten_s<1000)
{
ten_s++;
}
else
{
ten_s=0;
}
}
else if(key_Status==2)
{
key_Status_Count++;
if(key_Status_Count>=300)
{
key_Status_Count=0;
key_Status=0;
miao=1000;
ten_s=0;
}
}
else if(key_Status==0)
{
key_Status_Count=0;
key_Status=0;
miao=1000;
ten_s=0;
}
else if(key_Status==3)
{
key_Status_Count++;
miao=8888;
ten_s=8888;
if(key_Status_Count>=300)
{
key_Status_Count=0;
key_Status=0;
miao=1000;
ten_s=0;
}
}
}
void SMG_Task(void)
{
u8 num = 0;
if(SMG_no ==0)
{
num = miao/1000;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==1)
{
num = miao%1000/100;
Display_SMG( t_display|t_display,~T_COM);
}
else if(SMG_no ==2)
{
num = miao%100/10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==3)
{
num = miao%10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==4)
{
num = ten_s/1000;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==5)
{
num = ten_s%1000/100;
Display_SMG( t_display|t_display,~T_COM);
}
else if(SMG_no ==6)
{
num = ten_s%100/10;
Display_SMG( t_display,~T_COM);
}
else if(SMG_no ==7)
{
num = ten_s%10;
Display_SMG( t_display,~T_COM);
}
else
{
}
SMG_no ++ ;
if(SMG_no >7)
SMG_no =0;
}
#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
//u8t_display[];
//u8T_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 key_Init(void);
#endif
页:
1
[2]