找回密码
 立即注册
查看: 330|回复: 5

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2024-11-29 16:43:20 | 显示全部楼层 |阅读模式
第三集已学习,已手敲代码,测试通过
学习打卡点灯 8个灯成功点亮 (分号要英文格式,否则编译不通过)

截图202411291638341387.jpg 截图202411291639125920.jpg 第三集 点亮LED.zip (2 MB, 下载次数: 27) [apoyl_multivideo]




第四集 成功实现USB不停电下载,跟着冲哥步骤 添加库函数、添加USB库文件。
USB库文件操作好之后   注意都勾选    然后 先用普通下载,之后可以实现不停地下载

截图202412020908351915.jpg

第四集 USB不停电下载 学习手敲程序.zip (2.04 MB, 下载次数: 22)


第五集 C语言基础 ,已手敲代码测试通过
串口发送 选择一致的串口号 否则无法发送接收
截图202412020906291692.jpg 截图202412020907443415.jpg
运算符的用法 截图202412020909023243.jpg
第五集 C语言基础 学习手敲程序.zip (2.04 MB, 下载次数: 20)



第六集 while()用法,I/O口输入输出 学习打卡 手敲代码   
按键输入检测,抖动的解决办法:延时20ms消去抖动if(按键是否按下)


下载软件里的 软件延时计算器  方便快捷 ;
注意调用的头文件  以免编译出错
第六集 IO输入输出 学习手敲程序.rar (1.55 MB, 下载次数: 29)


第七集 定时器中断 学习手敲代码
任务二灯按下三秒后熄灭


任务3 救护车灯控 灯按下 等交替闪烁  再按两个灯熄灭。
用“定时器计算器”的小工具, 右下角的 “使能定时器中断 ”注意要勾选,不然就少了一条语句,按键后无反应的原因。
截图202412061037266456.jpg

第七集 定时器 学习手敲代码.zip (2.01 MB, 下载次数: 19)

第八集  跟着冲哥  学习手敲代码  , 用一个定时器实现  任务一  LED1实现 0.3秒取反一次、 LED2实现 0.6秒取反一次、 LED1实现 0.9秒取反一次
截图202412070836046085.jpg



for 和数组的应用
任务2:数组点亮LED,实现流水灯。代码
截图202412151919396530.jpg

第八集 定时器周期性调度任务 学习手敲代码.rar (1.56 MB, 下载次数: 22)


第九集 数码管    用官方下载软件里的工具窗口里的字库生成工具:
截图202412191413115102.jpg
第九集 数码管 学习手敲程序.zip (2.03 MB, 下载次数: 20)

第十一集 矩阵按键 学习手敲代码

第十一集 矩阵按键 学习手敲代码.zip (2.07 MB, 下载次数: 16)















QQ:3398500488
微信号:18106296592(小刘)
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2025-1-13 17:27:05 | 显示全部楼层
第十二集   复位系统   学习手敲代码
硬件复位  和软件复位
截图202501131723497289.jpg




第十二集 复位系统.zip (2.12 MB, 下载次数: 13)

QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2025-1-21 16:52:45 | 显示全部楼层
第十三集 中断系统,已手敲代码,测试通过

当按下外部中断INT1/P33, LED01显示取反

截图202501211649209995.jpg
截图202501211646578279.jpg

主程序代码:

#include "config.h"
#include "task.h"
#include "io.h"



char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void Delay3000ms(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 17999998UL;
        while (i) i--;
}

void main(void)
{
        Sys_init();                                                                                 
        usb_init();                                      

    IE2 |= 0x80;                                    
        Timer0_Init();                                                                        
         INT1_Init();           
    EA = 1;                                                                                         
        
        P40 = 0;
        
        while (DeviceState != DEVSTATE_CONFIGURED);      
        //WDT_CONTR = 0x24;        
        
        while(1)
        {
               
        if (bUsbOutReady)                                                         
        {
            //USB_SendData(UsbOutBuffer,OutNumber);   
                        
            usb_OUT_done();                                                         
        }
        //        Task_Pro_Handler_Callback();                                 
  
         
        // WDT_CONTR = 0x34;    //Çå¿Õ¿´ÃŹ·
        
        P00 = !P00;
        Delay3000ms();
        
        //if(P33 == 0)
        //P01 = !P01;
        }
}



void Timer0_Isr(void) interrupt 1                 
{

        Task_Marks_Handler_Callback();                                         

}


测试视频

代码 第十三集 外部中断 学习手敲代码.zip (5.32 MB, 下载次数: 10)


QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2025-1-23 14:56:20 | 显示全部楼层
第十四集 I/O中断  

中断号大于31在Keil 中编译出错的 方法:中断号拓展工具 。下载后解压 安装到Keil 的安装目录里
截图202501231432452998.jpg 下载链接:https://www.stcaimcu.com/data/download/Tools/%E6%8B%93%E5%B1%95Keil%E7%9A%84C%E4%BB%A3%E7%A0%81%E4%B8%AD%E6%96%AD%E5%8F%B7.zip

学习手敲代码 测试通过
截图202501231354522155.jpg

主程序 代码:  增加  P3_IO_Init();   // IO中断初始化
io.c 代码:增加

void P3_IO_Init(void)
{
                        P3IM0 = 0X00;       //中断模式设置为下降沿
                        P3IM1 = 0X00;
                       
                        P3INTE = 0X08;  //打开中断
}
void P3_IO_ISR(void)  interrupt 40
{
                        u8 intf;
                        intf = P3INTF;
                       
                        if( intf )    //判断有没有IO出发中断
                {
                        P3INTF = 0;
                        if(intf & 0x08 )   
                        {
                         P01 = !P01;
                        }
                }
}



第十四集 IO中断 学习手敲代码.zip (2.08 MB, 下载次数: 16)

第十四集 IO中断 任务二 学习手敲代码.zip (2.06 MB, 下载次数: 13)


QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2025-1-24 14:13:15 | 显示全部楼层
第十五集 定时器做计数器  学习手敲代码 测试成功

1. 截图202501241407011749.jpg

2. tim.c 代码

#include "tim.h"

u32 Count_T1 = 0;

void TIM1_Count_Init(void)
{
   T1_CT = 1;
         T1_M1 = 0;
         T1_M0 = 0;
         T1_GATE = 0;
         
         TH1 = (65536-Count_num)>>8;
         TL1 = (65536-Count_num);
         
             P3PU |= 0x20;    //内部4.1K上拉电阻打开

         TR1 = 1;  //启动定时器1
         ET1 = 1;  //打开定时器外部中断

}

void Timer1_Isr(void) interrupt 3                //1MS执行一次
{
         Count_T1 ++;     

}

void T1_RunTask(void)
{
    u32 count_th_t1 = 0;
                count_th_t1 = ((u16)TH1 << 8) + (u16)TL1;
                count_th_t1 -= 65526;
               
   SEG7_ShowLong(Count_T1*Count_num+count_th_t1,10);
         
}


3.完成视频


第十五集 定时器做计数器 学习手敲代码.zip (6.47 MB, 下载次数: 25)

4.任务二   定时器1 测量INT1引脚低电平脉冲宽度  代码
截图202501241500034986.jpg


tim.c 代码
#include "tim.h"

u32 Count_T1 = 0;

void Timer1_Isr(void) interrupt 3
{
     static u32 count_p33 = 0;
                 if(P33 == 0)
                 {
                   count_p33 ++ ;
                 
                 }
                 else
                 {
                 if(count_p33 > 0)
                 {
                 Count_T1 = count_p33;
                 }
     count_p33 = 0;
}
}
void Timer1_Init(void)                //100微秒@24.000MHz
{
        AUXR &= 0xBF;                        //定时器时钟12T模式
        TMOD &= 0x0F;                        //设置定时器模式
        TL1 = 0x38;                                //设置定时初始值
        TH1 = 0xFF;                                //设置定时初始值
        TF1 = 0;                                //清除TF1标志
        TR1 = 1;                                //定时器1开始计时
        ET1 = 1;                                //使能定时器1中断
}

void T1_RunTask(void)
{

//SEG7_ShowLong(Count_T1,10);//显示整数
SEG7_ShowString("%07.01f",((float)Count_T1)/10);

}



QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2025-2-14 10:16:19 | 显示全部楼层
打卡 第十六集  串口的简单应用
截图202502140953427411.jpg

2.
usart.c 代码:


#include "usart.h"
#include "io.h"

u8 Rec_Dat[50];  
u8 Rec_Num = 0;
bit  B_TX2_Busy = 0;

void Uart2_Isr(void) interrupt 8
{
        if (S2CON & 0x02)         
        {
                S2CON &= ~0x02;         
                 B_TX2_Busy = 0;
        }
        if (S2CON & 0x01)         
        {
                S2CON &= ~0x01;         
               
                Rec_Dat[Rec_Num++] = S2BUF;
        }
}

void Uart2_Init(void)        //9600bps@24.000MHz
{

  P_SW2 |= 0x01;                                                //UART2/USART2: RxD2(P4.6), TxD2(P4.7)

        S2CON = 0x50;                 
        AUXR |= 0x04;                 
        T2L = 0x8F;                 
        T2H = 0xFD;                         
        AUXR |= 0x10;                 
        IE2 |= 0x01;                 
       
        Rec_Num = 0;
         B_TX2_Busy = 0;
}

void Uart2_SendStr(u8 *puts)

{

    for (; *puts != 0;  puts++)      
    {
        S2BUF = *puts;
        B_TX2_Busy = 1;
        while(B_TX2_Busy);
    }

}


void Usart2_RunTask(void)
{
    if(Rec_Num >= 6)
                {
                   if((Rec_Dat[Rec_Num-1] == '\n') && (Rec_Dat[Rec_Num-2] == '\r'))
                         {
                           if( (Rec_Dat[Rec_Num-6] == 'O') &&  (Rec_Dat[Rec_Num-5] == 'P') &&  (Rec_Dat[Rec_Num-4] == 'E') &&  (Rec_Dat[Rec_Num-3] == 'N') )
                                 {

                                     passward[0] = 16;
                                     passward[1] = 16;
                                     passward[2] = 16;
                                     passward[3] = 16;
                                                 Uart2_SendStr( "打开成功\r\n");
                                }
                                 else if( (Rec_Dat[Rec_Num-7] == 'C') &&  (Rec_Dat[Rec_Num-6] == 'L') &&  (Rec_Dat[Rec_Num-5] == 'O') &&  (Rec_Dat[Rec_Num-4] == 'S') &&  (Rec_Dat[Rec_Num-3] == 'E') )
                                 {
                               passward[0] = 17;
                                     passward[1] = 17;
                                     passward[2] = 17;
                                     passward[3] = 17;
                                 Uart2_SendStr( "关闭成功\r\n");
                                }
                    Rec_Num = 0;
                                }
                        }
}


3.串口2发送字符串函数    puts:字符串指针

void Uart2_SendStr(u8 *puts)

{

    for (; *puts != 0;  puts++)     //遇到停止符0结束
    {
        S2BUF = *puts;
        B_TX2_Busy = 1;
        while(B_TX2_Busy);
    }

}

4.串口2接收成功
截图202502141015364286.jpg
第十六集 串口的简单应用.zip (6.43 MB, 下载次数: 4)


QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 09:55 , Processed in 0.114758 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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