找回密码
 立即注册
查看: 663|回复: 15

《8051U深度入门到32位51大型实战教学视频》学习打卡

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-11-29 11:39:41 | 显示全部楼层 |阅读模式
跟着冲哥打卡第五集 C语言基础 完成
C语言USB-CDC串口之printf趣数的实现
1.打开USB库中的PRINTF.HIQ宏定义(去掉//)
2.理解PRINTF的函数原型的定义 #define printf printf_hid int printf_hid (const char *fmt; ...);
参数fmt --是格式控制字符串,包含了两种类型的对象:普通字符和转换说明普通字符:在输出时,普通字符将原样不动地复制到标准输出。

转换说明简介
1.类型:根据不同的fmt字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了fmt参数中指定的每个%标签。关子附加参数,既可以是变量,也可以是常量。
2.位置: printf()函数的普通字符和转换说明放在""双引号内,附加参数放在双引号外,每个附加参数之间用逗号隔开。
3.数量:printf()的附加参数与转换说明符是。一对应关系,如果有n个转换说明符;,printf)的参数就应该有n+1个。如果参数个数少于对应的转换说明符,printf(可能会输出内存中的任意值。
截图202411291139003130.jpg 截图202411291139106711.jpg

05 C语言基础.zip

88.14 KB, 下载次数: 37

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-5 14:13:39 | 显示全部楼层
第六集  I/O口输入输出 打卡完成
代码测试已通过


133118sqpn6060mp0raqcr.jpg
133109dzokyhxyu3rxg8xg.jpg

06.IO输入输出.zip

90.25 KB, 下载次数: 43

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-5 14:25:08 | 显示全部楼层
第七集  定时器中断 打卡完成
代码测试已通过
截图202412051425387569.jpg 截图202412051426038408.jpg

7291b6f450b107bb3429c0bacbf2b76c.mp4

1.92 MB, 下载次数: 43

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-10 16:32:59 | 显示全部楼层
第八课:定时器周期性调度任务。编译过程中也出现了很多错误,一个分号的失误也是排查了很久,不能遗漏小小的一个符号
任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED30.9秒取反一次
任务2:数组点亮LED,实现流水灯
任务3:按键1按一下,LED通过数组移动一下
截图202412101633527298.jpg 截图202412101637139494.jpg 截图202412101638077059.jpg
截图202412101633162940.jpg

2db5e80a1226e72e8aede0cf2d216aa9.mp4

888.64 KB, 下载次数: 38

47753493cae45c1fef90806170f01ca0.mp4

1.02 MB, 下载次数: 33

08定时器周期性调度任务.zip

91.72 KB, 下载次数: 42

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-26 16:26:50 | 显示全部楼层
任务一:数码管静态显示一个数字
截图202412261627052306.jpg 截图202412271458098233.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-27 14:59:44 | 显示全部楼层
任务2:数码管显示 12345678
截图202412271459567375.jpg 截图202412271500023322.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-27 15:41:05 | 显示全部楼层
任务3:数码管显示“00-00-00”分别代表时分秒,每过1秒钟秒+1;
截图202412271541152735.jpg

9a671fcf098b810fa1d42d676894ff9a.mp4

1009.39 KB, 下载次数: 43

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-27 16:42:02 | 显示全部楼层
任务四:虚拟显示——LED和数码管
截图202412271642148858.jpg 截图202412271642242038.jpg 截图202412271642468196.jpg

09 shu码管.zip

153.97 KB, 下载次数: 45

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-30 16:26:11 | 显示全部楼层
第十集 虚拟LED数码管,已手敲代码,编译通过
任务1: P2口流水灯,P10闪烁
截图202412301626289646.jpg
#include "io.h"

u8 State1 = 0;                                //LED1初始状态
u8 State2 = 0;                                //LED2初始状态        
u8 State3 = 0;                                //LED3初始状态
u16 Key_Vol = 0;                        //按键按下持续时间

void LED0_Blink(void)

{
        State1 = !State1;
        P00 = State1;        
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

void KEY_Task(void)
{
        if( P32 == 0 )
        {
                Key_Vol++;
                if(Key_Vol==5)
                {
                //按键按下的任务
                        printf("按键单击\r\n");
                }
        }
        else
        {
                Key_Vol = 0;
        }
}

u8 P2_STATE = 0x01;
u8 P10_STATE = 0;

//任务1:P2口流水灯,P10闪烁
void TASK_1(void)
{
//-----------        p2端口流水灯-----------
        LED40_SetPort(2,~P2_STATE);                                        //点亮P20端口
        
        P2_STATE = (P2_STATE<<1);
        if(P2_STATE == 0)
           P2_STATE = 1;
//-----------   P10闪烁  --------------
        if(P10_STATE == 0)  
                LED40_SetBit(1,0);
        else
                LED40_ClrBit(1,0);
        
        P10_STATE = !P10_STATE;        
}

任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
截图202412301719525511.jpg
#include "io.h"

u8 State1 = 0;                                //LED1初始状态
u8 State2 = 0;                                //LED2初始状态        
u8 State3 = 0;                                //LED3初始状态

u16 Key_Vol;                        //按键按下持续时间
u16 Key_Vol_2;                        //按键按下持续时间

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;        
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

u16 KEY1_COUNT = 0;                                //P32按钮计数
u16 KEY2_COUNT = 0;

void KEY_Task(void)
{
//----------P32按钮计数----------
        if( P32 == 0 )
        {
                Key_Vol++;
                if(Key_Vol==5)
                {
                        KEY1_COUNT++;
                }
        }
        else
        {
                Key_Vol = 0;
        }
//----------P33按钮计数----------
                if( P33 == 0 )
        {
                Key_Vol_2++;
                if(Key_Vol_2==5)
                {
                        KEY2_COUNT++;
                }
        }
        else
        {
                Key_Vol_2 = 0;
        }
}

u8 P2_STATE = 0x01;
u8 P10_STATE = 0;

//任务1:P2口流水灯,P10闪烁
void TASK_1(void)
{
//-----------        p2端口流水灯-----------
        LED40_SetPort(2,~P2_STATE);                                        //点亮P20端口
        
        P2_STATE = (P2_STATE<<1);
        if(P2_STATE == 0)
           P2_STATE = 1;
//-----------   P10闪烁  --------------
        if(P10_STATE == 0)  
                LED40_SetBit(1,0);
        else
                LED40_ClrBit(1,0);
        
        P10_STATE = !P10_STATE;        
}
u32 KEY_Count = 0;

//任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
void TASK_2(void)
{
        KEY_Count = KEY1_COUNT *10000 + KEY2_COUNT;
        
        SEG7_ShowLong( KEY_Count,10 );
}
任务3:按下数字按键在数码管显示对应的按键数字
截图202412311002543862.jpg 截图202412311003083354.jpg
#include "io.h"

u8 State1 = 0;                                //LED1初始状态
u8 State2 = 0;                                //LED2初始状态        
u8 State3 = 0;                                //LED3初始状态

u16 Key_Vol;                        //按键按下持续时间
u16 Key_Vol_2;                        //按键按下持续时间

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;        
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

u16 KEY1_COUNT = 0;                                //P32按钮计数
u16 KEY2_COUNT = 0;

void KEY_Task(void)
{
//----------P32按钮计数----------
        if( P32 == 0 )
        {
                Key_Vol++;
                if(Key_Vol==5)
                {
                        KEY1_COUNT++;
                }
        }
        else
        {
                Key_Vol = 0;
        }
//----------P33按钮计数----------
                if( P33 == 0 )
        {
                Key_Vol_2++;
                if(Key_Vol_2==5)
                {
                        KEY2_COUNT++;
                }
        }
        else
        {
                Key_Vol_2 = 0;
        }
}

u8 P2_STATE = 0x01;
u8 P10_STATE = 0;

//任务1:P2口流水灯,P10闪烁
void TASK_1(void)
{
//-----------        p2端口流水灯-----------
        LED40_SetPort(2,~P2_STATE);                                        //点亮P20端口
        
        P2_STATE = (P2_STATE<<1);
        if(P2_STATE == 0)
           P2_STATE = 1;
//-----------   P10闪烁  --------------
        if(P10_STATE == 0)  
                LED40_SetBit(1,0);
        else
                LED40_ClrBit(1,0);
        
        P10_STATE = !P10_STATE;        
}
u32 KEY_Count = 0;

//任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
void TASK_2(void)
{
        KEY_Count = KEY1_COUNT *10000 + KEY2_COUNT;
        
        SEG7_ShowLong( KEY_Count,10 );
}
u32 REC_NUM = 0;

//任务3:按下数字按键在数码管显示对应的按键数字!
void TASK_3(void)
{
         SEG7_ShowLong( REC_NUM,10 );
}



10.虚拟LED和shu码管.zip

4.88 MB, 下载次数: 38

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-04-28 08:50:50

17

主题

175

回帖

1911

积分

版主

积分
1911
发表于 2024-12-31 11:35:21 | 显示全部楼层
第十一课:矩阵按键
独立按键:一端接单片机引脚,一端接地或电源,一个按键对应一个端口。
矩阵按键:有限端口实现更多按键,按键检测比独立按键慢。
按键识别原理:端口默认为高电平,实时读取到引脚为低电平是表示按下。①第一步:现将P0.0-P0.3输出低电平,P0.6- P0.7输出高电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。②第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。③第三步:行列组合一下就可以判断出是哪个按键按下了。

#include "io.h"

u8 State1 = 0;                                        //LED1初始状态
u8 State2 = 0;                                        //LED2初始状态
u8 State3 = 0;                                        //LED3初始状态

u16 Key_Vol = 0;                                //按键按下持续时间

u8 SEG_NUM[]=
{
    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_NUM[8] =
{
        0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
};

void LED0_Blink(void)
{
        State1 = !State1;
        P00 = State1;
}

void LED1_Blink(void)
{
        State2 = !State2;
        P01 = State2;
}

void LED2_Blink(void)
{
        State3 = !State3;
        P02 = State3;
}

void KEY_Task(void)
{
        if( P32 == 0 )
        {
                Key_Vol++;
                if( Key_Vol==5 )
                {
                        //按键按下的任务
                        printf( "按键单击\r\n" );
                }
        }
        else
        {
                Key_Vol = 0;
        }
       
}
/*
        #define ROW1        P06
        #define ROW2        P07
        #define COL1        P00
        #define COL2        P01
        #define COL3        P02
        #define COL4        P03
*/
       
u8 key_num = 0xff;

//任务一:数码管显示当前的按键号
void Task_1(void)
{
       
        COL1 = 0;
        COL2 = 0;
        COL3 = 0;
        COL4 = 0;
        ROW1 = 1;
        ROW2 = 1;
       
        if(( ROW1 == 0 )||( ROW2 == 0))  //如果行按键有按下
        {
                if(( ROW1 ==0)&&(ROW2 ==0))
                {
                       
                }
                else if(((ROW1 ==1)&&(ROW2 ==0)) || ((ROW1 ==0 )&&(ROW2 ==1)))
                {
                        if( ROW1 ==0 )
                                key_num = 0;
                        else if( ROW1 ==0 )
                                key_num = 4;
                       
                        COL1 = 1;
                    COL2 = 1;
                        COL3 = 1;
                        COL4 = 1;
                        ROW1 = 0;
                        ROW2 = 0;
                       
                        if( COL1 ==0 )
                        {
//                                key_num = key_num ;
                        }
                        else if(COL2 ==0)
                        {
                                key_num = key_num + 1;
                        }
                        else if(COL3 ==0)
                        {
                                key_num = key_num + 2;
                        }
                        else if(COL4 ==0)
                        {
                                key_num = key_num + 3;
                        }
                       
                }
                COL1 = 0;
                COL2 = 0;
                COL3 = 0;
                COL4 = 0;
                ROW1 = 1;
                ROW2 = 1;
        }
        else
        {
                key_num = 0xff;
        }
               
}
void Init_595(void)
{
        HC595_SER = 0;
        HC595_RCK = 0;
        HC595_SCK = 0;       
}
       


void Send_595( u8 dat )
{
        u8 i;
       
        for( i=0;i<8;i++ )
        {
                dat <<= 1;                                //DAT = (DAT<<1);        //CY
                HC595_SER = CY;                //先把数据写到引脚上
                HC595_SCK = 1;                        //输出上升沿的时钟信号
                HC595_SCK = 0;
        }
}

void Display_Seg(u8 HC595_1,u8 HC595_2)
{
        Send_595(HC595_1);                        //数码管段码输出  高电平点亮
        Send_595(HC595_2);                        //数码管位码      低电平点亮
       
        HC595_RCK = 1;                                //数据输出       
        HC595_RCK = 0;
}

void SEG_Task(void)
{
        if( key_num == 255 )
        Display_Seg( SEG_NUM[17] , ~T_NUM[0]);
        else
        Display_Seg( SEG_NUM[key_num] , ~T_NUM[0]);
}

404cd988bfc0264b0db916fb7c5ee2a6.mp4

1.43 MB, 下载次数: 41

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 22:18 , Processed in 0.203300 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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