找回密码
 立即注册
楼主: z371322

学习官方Ai8051U实验箱|学习打卡

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 07:32:08
已绑定手机

3

主题

22

回帖

315

积分

中级会员

积分
315
发表于 2025-4-2 21:54:52 | 显示全部楼层
第九集  

发现一个问题,根据芯片手册里面添加了一串代码在编译器里面之后会导致取余计算处理不了,会卡住 ---REMOVEUNUSED  这串符号一定不要添加,添加之后会导致取余没法运算。
截图202504022150071649.jpg
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







       
       
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 07:32:08
已绑定手机

3

主题

22

回帖

315

积分

中级会员

积分
315
发表于 2025-4-3 23:12:29 | 显示全部楼层
第九集 课后小练——简易10秒免单计数器

挺好玩的,总想按以下,

#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 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[num],~T_COM[0]);
        }
        else if(SMG_no ==1)
        {
                num = miao%1000/100;
                Display_SMG( t_display[num]|t_display[18],~T_COM[1]);
        }
        else if(SMG_no ==2)
        {
                num = miao%100/10;
                Display_SMG( t_display[num],~T_COM[2]);
        }
        else if(SMG_no ==3)
        {
                num = miao%10;
                Display_SMG( t_display[num],~T_COM[3]);
        }
        else if(SMG_no ==4)
        {
                num = ten_s/1000;
                Display_SMG( t_display[num],~T_COM[4]);
        }
        else if(SMG_no ==5)
        {
                num = ten_s%1000/100;
                Display_SMG( t_display[num]|t_display[18],~T_COM[5]);
        }
        else if(SMG_no ==6)
        {
                num = ten_s%100/10;
                Display_SMG( t_display[num],~T_COM[6]);
        }
        else if(SMG_no ==7)
        {
                num = ten_s%10;
                Display_SMG( t_display[num],~T_COM[7]);
        }
        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

//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 key_Init(void);



#endif
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 03:09 , Processed in 0.244111 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表