《8051U深度入门到32位51大型实战教学视频》学习打卡
第3集已学习,已手敲代码,测试通过第4集已学习,已手敲代码,测试通过
第5集已学习,已手敲代码,测试通过
<p>第6集学习打卡</p>
<p><img src="data/attachment/forum/202412/10/160050s55rlltq0zar0ll8.png" alt="第6集代码.png" title="第6集代码.png" /></p>
<p><img src="data/attachment/forum/202412/10/160050at80memr9merlklm.png" alt="第6集实验箱.png" title="第6集实验箱.png" /></p>
<p>第6集代码:</p>
<p>#include "ai8051u.h" //调用头文件<br />
#include "stc32_stc8_usb.h"<br />
#include "intrins.h"//调用头文件<br />
#define u8 unsigned char//8位无符号变量(0-255)<br />
#define u16 unsigned int//16位无符号变量(0-65535)<br />
u8 state = 0; // 初始状态<br />
char *USER_DEVICEDESC = NULL;<br />
char *USER_PRODUCTDESC = NULL;<br />
char *USER_STCISPCMD = "@STCISP#";</p>
<p>void Delay20ms(void) //@24.000MHz<br />
{<br />
unsigned long edata i;<br />
<em>nop</em>();<br />
<em>nop</em>();<br />
i = 119998UL;<br />
while (i) i--;<br />
}</p>
<p>void main(void)<br />
{<br />
WTST = 0;<br />
EAXFR = 1;<br />
CKCON = 0;<br />
P0M1 = 0x00; P0M0 = 0x00;<br />
P1M1 = 0x00; P1M0 = 0x00;<br />
P2M1 = 0x00; P2M0 = 0x00;<br />
P3M1 = 0x00; P3M0 = 0x00;<br />
P4M1 = 0x00; P4M0 = 0x00;<br />
P5M1 = 0x00; P5M0 = 0x00;<br />
P6M1 = 0x00; P6M0 = 0x00;<br />
P7M1 = 0x00; P7M0 = 0x00;</p>
<pre><code>usb_init();
IE2 |= 0x80;
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED);
while(1)
{
if (bUsbOutReady)
{
// USB_SendData(UsbOutBuffer,OutNumber);
usb_OUT_done();
}
if(P32 == 0) //判断P32按钮是否按下
{
P00 = 0;
}
else
{
P00 = 1;
}
}
</code></pre>
<p>}</p>
第7集打卡学习
程序:
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h"
#include "intrins.h"//调用头文件
#define u8 unsigned char//8位无符号变量(0-255)
#define u16 unsigned int//16位无符号变量(0-65535)
u8 state = 0; //初始状态
//u8 Run_State = 0; //运行状态
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void Delay20ms(void) //@24.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
void Timer0_Init(void) //3秒@24.000MHz
{
TM0PS = 0x5B; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x3F; //设置定时初始值
TH0 = 0x01; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
//TM0PS = 91;
//12T/12
// TH0-TL0=319
}
void main(void)
{
int count = 1; //按键计数
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
usb_init();
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();
}
//任务1: LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数
if(P32 == 0) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
printf("按键按下次数\xfd:%d 次\r\n",(int)count);
count++;
while(P32 == 0); //等待P32松开
}
}
}
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
state = !state;
P00 = state;
}
第8集
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0;
u8 num = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
int count = 1;
Sys_init();
usb_init();
IE2 |= 0x80;
Timer0_Init();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED);
while(1)
{
if (bUsbOutReady)
{
// USB_SendData(UsbOutBuffer,OutNumber);
usb_OUT_done();
}
Task_Pro_Handler_Callback();
}
}
void Timer0_Isr(void) interrupt 1
{
Task_Marks_Handler_Callback();
}
第9集手敲代码通过
#include "config.h"
#include "task.h"
#include "io.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
Sys_init(); //ϵͳ³õʼ»¯
usb_init(); //USB CDC ½Ó¿ÚÅäÖÃ
IE2 |= 0x80; //ʹÄÜUSBÖжÏ
Timer0_Init(); //¶¨Ê±Æ÷³õʼ»¯
Init_595();
EA = 1; //IE |= 0X80;
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 //1MSÖ´ÐÐÒ»´Î
{
Task_Marks_Handler_Callback(); //ϵͳ¼ÆÊ±
}
第十集:
点亮P20端口
void TASK_1( void )
{
//-------------------------p2端口流水灯------------------------
LED40_SetPort(2,~P2_STATE);//点亮P20端口
}
P2口流水灯,P10闪烁 ,见视频
左边数码管显示p32按下次数,右边数码管显示p33按下次数
按下数字按键在数码管显示对应的数字按键
第十一集
任务一
代码:
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
int count = 1; //按键计数
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED);
while(1)
{
if (bUsbOutReady)
{
// USB_SendData(UsbOutBuffer,OutNumber);
usb_OUT_done();
}
Task_Pro_Handler_Callback();
}
}
void Timer0_Isr(void) interrupt 1
{
Task_Marks_Handler_Callback();
}
任务二
代码:
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
int count = 1;
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED);
while(1)
{
if (bUsbOutReady)
{
// USB_SendData(UsbOutBuffer,OutNumber);
usb_OUT_done();
}
Task_Pro_Handler_Callback();
}
}
void Timer0_Isr(void) interrupt 1
{
Task_Marks_Handler_Callback();
}
第12集复位系统
任务一:
代码:
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
int count = 1; //按键计数
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
WDT_CONTR = 0X24;
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback();//执行功能函数
if( P33 !=0)
WDT_CONTR = 0X34;
}
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
Task_Marks_Handler_Callback(); //系统计时
}
任务二
(1)复位后进入下载模式
(2)复位后从头开始运行用户程序
程序:
#include "config.h"
#include "task.h"
#include "io.h"
u8 State={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void)
{
int count = 1; //按键计数
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
WDT_CONTR = 0X24;
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback();//执行功能函数
WDT_CONTR = 0X34;
}
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
Task_Marks_Handler_Callback(); //系统计时
}
页:
[1]
2