热心市民 发表于 2024-11-29 11:32:56

8051U深度入门到32位51,冲哥 新教学视频 学习打卡

本帖最后由 热心市民 于 2024-11-29 15:55 编辑

第一集第二集快速看完

热心市民 发表于 2024-11-29 11:35:14

本帖最后由 热心市民 于 2024-11-29 15:55 编辑

第三集开始上手写代码
点亮led,最后8个灯全亮

热心市民 发表于 2024-11-29 11:39:53

本帖最后由 热心市民 于 2024-11-29 15:59 编辑

第四集usb不停电下载打卡成功,,跟着一步一步操作肯定是能成功的,冲哥真的教的非常的详细适合小白入门

热心市民 发表于 2024-11-29 17:27:09

第五集,C语言基础,
C语言USB-CDC串口之printf函数的实现·
1.打开USB库中的PRINTF HID宏定义(去掉//)
⒉理解PRINTF的函数原型的定义
如何打开PRINTF_HID功能
(小插曲
总结上节课不停电下载不成功的原因,1设置项目target未按要求设置,

2,usb_cdc的lib库函数没有添加成功)
继续学习

代码已通过

热心市民 发表于 2024-12-5 16:42:44

第六集IO的输入输出,学习打卡 完成

热心市民 发表于 2024-12-5 16:43:23

第七集学习打卡完成


热心市民 发表于 2024-12-6 11:51:12

第八集开始学习。。


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



u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

u8 i;
//State

u8 Run_State = 0;                                                        //运行状态

u8 num = 0;

//u16 Count_300 = 0;                                                //计数300ms变量
//u16 Count_600 = 0;
//u16 Count_900 = 0;

u16 Count_ms = {0,0,0};                                       

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                        //3个计时变量       

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

        _nop_();
        _nop_();
        _nop_();
        i = 59998UL;
        while (i) i--;
}
       
void main(void)
{
//    int count;
        Sys_init();                                        //系统初始化
    usb_init();                                        //USB CDC 接口配置

        IE2 |= 0x80;                              //使能USB中断
        Timer0_Init();                                //定时器初始化
       
    EA = 1;       
       
        P40=0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);           //等待USB完成配置
       
        while(1)
        {
                if (bUsbOutReady)                                                                //如果接收到数据
      {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                               
                        usb_OUT_done();                                                       
      }
                Task_Pro_Handler_Callback();                                        //执行函数                       
        }
}



void Timer0_Isr(void) interrupt 1                                                //1毫秒执行一次
{
        Task_Marks_Handler_Callback();
}       
//        Count_300++;
//        Count_600++;
//        Count_900++;
//        state = !state;                                                        //变量取反0 1 0 1 0 1       
//        P00 = state;       
//        P01 = !state;

热心市民 发表于 2025-1-24 09:08:57

第九集 数码管
任务一:数码管静态的显示一个数字


任务二:显示“12345678”


任务三:显示时分秒




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



u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

u8 i;
//State

u8 Run_State = 0;                                                        //运行状态

u8 num = 0;

//u16 Count_300 = 0;                                                //计数300ms变量
//u16 Count_600 = 0;
//u16 Count_900 = 0;

u16 Count_ms = {0,0,0};                                       

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                        //3个计时变量       

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

        _nop_();
        _nop_();
        _nop_();
        i = 59998UL;
        while (i) i--;
}
       
void main(void)
{
//    int count;
        Sys_init();                                        //系统初始化
    usb_init();                                //USB CDC 接口配置

        IE2 |= 0x80;                //使能USB中断
        Timer0_Init();                                //定时器初始化
        Init_595();                                        //595端口初始化
    EA = 1;       
       
        P40=0;
       
        while (DeviceState != DEVSTATE_CONFIGURED);           //等待USB完成配置
       
        while(1)
        {
                if (bUsbOutReady)                                                                //如果接收到数据
      {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                               
                        usb_OUT_done();                                                       
      }
                Task_Pro_Handler_Callback();                                        //执行函数                       
        }
}



void Timer0_Isr(void) interrupt 1                                                //1毫秒执行一次
{
        Task_Marks_Handler_Callback();
}       
//        Count_300++;
//        Count_600++;
//        Count_900++;
//        state = !state;                                                        //变量取反0 1 0 1 0 1       
//        P00 = state;       
//        P01 = !state;

热心市民 发表于 2025-1-24 15:02:19

第十集:虚拟键盘led和数码管学习
任务1:P2口流水灯,P10闪烁,成功




#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);                //10000 0000->1 0000 0000
      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按下次数



#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;
}

u16KEY1_COUNT = 0; //p32计数
u16KEY2_COUNT = 0; //p33计数

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 = 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);                //10000 0000->1 0000 0000
      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:按下数字按键在数码管显示对应的按键数字!



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


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

extern u32   REC_NUM;


void main(void)
{
      Sys_init();                                                                              //系统初始化
      usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
      Timer0_Init();                                                                        //定时器初始化
    EA = 1;                                                                                        //IE |= 0X80;
      
      P40 = 0;
      
      while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置
      
      while(1)
      {
               
      if (bUsbOutReady)                                                      //如果接收到了数据
      {
                REC_NUM=UsbOutBuffer-48;
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        
            usb_OUT_done();                                                      //
      }
                Task_Pro_Handler_Callback();                              //执行功能函数

      }
}



void Timer0_Isr(void) interrupt 1                //1MS执行一次
{

      Task_Marks_Handler_Callback();                                        //系统计时

}



页: [1]
查看完整版本: 8051U深度入门到32位51,冲哥 新教学视频 学习打卡