《8051U深度入门到32位51大型实战教学视频》之学习心得
第一集序Ai8051U,USB 型 1T 8051,支持32位和8位指令集, RMB2.3
管脚兼容天王级别的:89C52RC,12C5A60S2
要兼容 8位8051指令集,可以用 Keil C51/IAR/SDCC 编译器
===就相当于更强大的 8H8K64U
要兼容 32位8051指令集,可以用 Keil C251 编译器,双核兼容设计
===就相当于更强大的 32G12K128, 32G8K64
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz, 硬件浮点/硬件三角函数 运算器
DMA支持PWM, DMA支持外设直接到外设, P2P
120MHz-PWM支持硬件移相,16位PWM; 真12位ADC
USB, 4组串口,12位ADC, 轨到轨比较器
QSPI, SPI, I2S, I2C,TFT-i8080/M6800 接口
PDIP40,LQFP44,LQFP48
第二集硬件及工具介绍
跟着下载步骤说明,成功下载第一个程序
第三集点亮第一个LED
第四集USB不停电下载-----手敲代码,测试成功
第5集C语言基础,已手敲代码,测试通过
第六集 IO输入输出,手敲代码,测试成功
第七集 定时器中断 手敲代码,测试成功
第八集 定时器周期性调度任务学习程序 手敲代码,测试成功
第九集 数码管 手敲代码,测试成功
任务一:数码管静态的显示一个数字
任务二:显示“12345678”
任务三:显示时分秒
第十集 虚拟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);
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;
}
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:按下数字按键在数码管显示对应的按键数字
#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 );
}
页:
[1]
2