重点部分:
移植关键部分到工程:
1, 添加头文件
2, USB初始化函数(lib+.h库实现)
3, 命令参数
4, 打开P_SW2寄存器和IE2寄存器(只打开一个位) 【第5集】小熬一下,开始第五集了,本集为C语言基础的提升课程
重点一:C语言 USB-CDC串口之printf函数的实现
1.打开USB库中的PRINTF_HID宏定义(去掉//)
2.理解PRINTF的函数原型的定义
#define printfprintf_hid
int printf_hid (const char *fmt, ...);
参数fmt -- 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。
普通字符:在输出时,普通字符将原样不动地复制到标准输出。
printf("8051U深度入门到32位51大型实战视频\r\n");
转换说明:不直接输出,用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明符结束,从而说明输出数据的类型、宽度、精度等。
printf("8051U深度入门到32位51大型实战视频,%s\r\n","加油");
转换说明简介:
1.类型:根据不同的 fmt 字符串,函数可能需要一系列的附加参数,每个
参数包含了一个要被插入的值,替换了 fmt 参数中指定的每个 % 标签。
关于附加参数,既可以是变量,也可以是常量。
2.位置:printf()函数的普通字符和转换说明放在" "双引号内,附加参数
放在双引号外,每个附加参数之间用逗号隔开。
3.数量:printf() 的附加参数与转换说明符是??对应关系,如果有 n 个转
换说明符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的转
换说明符,printf() 可能会输出内存中的任意值。
【第5集】重点二:
数的进制:2进制、10进制、16进制
【第5集】重点三:
数据的基本类型
想要使用64位变量,需要在程序文件里面添加申明:#pragma float64
重点四:
C语言常用运算符
算术运算符
+:加法
-:减法
*:乘法
/:除法
%:取模(取余)
关系运算符
用于比较两个值。
==:等于
!=:不等于
>:大于
<:小于
>=:大于等于
<=:小于等于
逻辑运算符
用于组合多个条件。
&&:逻辑与(AND)
||:逻辑或(OR)
!:逻辑非(NOT)
赋值运算符
用于给变量赋值。
=:赋值
+=:加后赋值
-=:减后赋值
*=:乘后赋值
/=:除后赋值
%=:取模后赋值
&=:按位与后赋值
|=:按位或后赋值
^=:按位异或后赋值
<<=:左移后赋值
>>=:右移后赋值
还有一些其他的 【第6集】IO输入输出
什么是GPIO:
全称:General Purpose I/O Ports
意思为通用输入/输出端口,通俗地说,就是一些引脚。
可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。
pnm0和pnm1的组合方式:
00准双向口
01推挽输出
10高阻输入
11开漏模式 【第6集ing】IO输入输出
按键输入检测
代码实现原理:程序直接读取按键的IO的电平即可,一般使用”==”即可
任务1:按下P32按钮灯亮,松开P32按钮灯灭;
if( P32 == 0 ) //判断P32按钮是否按下
{
P00 = 0;
}
else
{
P00 = 1;
}
任务2:按下P32按钮灯灭,松开P32按钮灯亮;
if( P32 == 1 ) //判断P32按钮是否按下
{
P00 = 0;
}
else
{
P00 = 1;
}
任务3:按一下灯亮,按一下灯灭
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
state = !state; //变量取反 0 1 0 1 0 1
P00 = state;
printf("state:%d\r\n",(int)state);
while( P32 == 0 ); //等待P32松开
}
}
【第7集】定时器
定时器作用:
(1) 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2) 替代长时间的Delay,提高程序的运行效率和处理速度(可以打断主循环)
任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数。
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
printf("按键按下次数\xfd:%d 次\r\n",(int)count);
count++;
while( P32 == 0 ); //等待P32松开
}
} 【第7集】定时器
任务2:灯按一下点亮三秒后熄灭。
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
printf("按键按下次数\xfd:%d 次\r\n",(int)count);
count++;
P00 = 0;
Timer0_Init();
while( P32 == 0 ); //等待P32松开
}
}
任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2 表示红和蓝灯),再按一下报警按钮,红蓝灯停止。
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
Run_State = !Run_State; //运行状态取反
if( Run_State==1 ) //运行
{
Timer0_Init();
}
else
{
TR0 = 0; //关闭定时器
P00 = 1;
P01 = 1;
}
P00 = 0;
Timer0_Init();
while( P32 == 0 ); //等待P32松开
}
} 板子还没到,然而我已经饥渴难耐了,下载了个Proteus模拟一波,
先来组正反跑马灯解解渴。 跑马灯实际操作,
哦,这该死的流畅感
页:
1
[2]