找回密码
 立即注册
楼主: xhljs

实验一:PRINTF_USB 直接输出数据

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-02 10:54:46
已绑定手机

6

主题

31

回帖

216

积分

中级会员

积分
216
发表于 7 天前 | 显示全部楼层
xhl*** 发表于 2025-9-24 19:30
第四集 建立工程点亮第一颗LED下

摘要:

谢谢老师指导
枯躁的背后,有成功的喜悦。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-02 10:54:46
已绑定手机

6

主题

31

回帖

216

积分

中级会员

积分
216
发表于 7 天前 | 显示全部楼层
第5集 C语言运算符和进制数入门上
摘要
1.C语言printf函数的实现
2.数的进制:2进制、10进制、16进制
3.C语言常用运算符
4.数据的基本类型
详细步骤:

1.C语言printf函数的实现
1.1.编写源代码(放在while(1))死循环里:
If(DeviceState !=DEVSTATE_CONFIGURED)   //USB是否连接成功
Continue;
If(bUsbOutReady)
{
Usb_OUT_done();   //接收应答(固定格式)
}

Printf(“Hello World!”);     //常规用法:
Printf(“室内温度:%.2f\r\n 室内湿度:%.2f\r\n ”,11.2,55.2);

1.2.打开keil v5软件,打开扫描串口:usb-cdc,注意到自适应波特率115200(右窗口波特率也要设置115200),串口号COM5,勾选“1秒后,自动打开串口。
1.3.程序编译后,无错误无警告,下载
1.4.在右中窗发送缓冲区:填写数字“1”,在右上窗口,就相应接收到一串 数字字符,这是因为接收缓冲区显示的是HEX格式,如果接收缓冲区,勾选“文本格式”,则在接收缓冲区,立即显: Hello world!
2.数的进制:2进制、10进制、16进制
2.1.1.格式字符:
2.1.1.1.%d:以十进制整数形式输出
2.1.1.2.%ld:以十进制长整形输出
2.1.1.3.%f:以单精度浮点型输出(n.m:n表示整数占几位,m表示小数占几位)
2.1.1.4.%lf:以双精度浮点型输出
2.1.1.5.%o:以八进制整数形式输出
2.1.1.6.%x:以十六进制整数形式输出
2.1.1.7.%u:以十进制无负号整形输出
2.1.1.8.%i:以十进制整数形式输出(与%d无异)
2.1.1.9.%c:输出单个字符
2.1.1.10.%e或%E:以指数形式输出
2.1.1.11.%g或%G:自适应数据输出(数据够大或够小以指数形式输出,否则以小数形式输出)
2.1.1.12.“-”:输出结果左对齐
2.1.1.13.空格:输出值为正时冠以空格,为负时冠以负号
2.1.1.14.“#”:输出带有前导的数据(八进制为O~~~,十六进制X~~~)
2.1.2.转义字符:
2.1.2.1.\?:在书写连续多个问好时使用,防止他们被解析成三字字词
2.1.2.2.\’:用于表示字符常量
2.1.2.3.\”:用于表示一个目负床内部的双引号
2.1.2.4.\\:用于表示一个反斜杠,防止它被解释为一个转义序列符
2.1.2.5.\a:警告字符,蜂鸣
2.1.2.6.\b:退格符
2.1.2.7.\f:换页符
2.1.2.8.\n:换行符
2.1.2.9.\r:回车(windows系统:\r\n,unix系统:\n,mac系统:\r)
2.1.2.10.\t:水平制表符(8从此空格)
2.1.2.11.\v:垂直制表符
2.1.2.12.\ddd:ddd表示1~3个八进制的数字,如:\120
2.1.2.13.\xdd:dd表示2个十六进制的数字,如:\x30
2.1.2.14.
2.2.回车与换行的区别:
2.3.学会查阅ASCII 字符代码表一:
2.4.每个文本字符都有对应的十六进制(HEX格式)数
2.4.1.每个数字字符,占用2个HEX格式数据(字符:0,HEX:30)
2.4.2.每个文字字符,占用4个HEX格式数据(字符:当,HEX: B5 B1)
2.4.3.注意:16进制:在C语言里,80H,写成0X80
2.4.4.学会利用程序计算器、ASCII代码表查询,将文本字符转换为HEX数字。
2.4.5.跟着老师复习理解二进制、十进制、十六进制相互之间的转换。
枯躁的背后,有成功的喜悦。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-02 10:54:46
已绑定手机

6

主题

31

回帖

216

积分

中级会员

积分
216
发表于 7 天前 | 显示全部楼层
xhl*** 发表于 2025-9-26 11:56
第5集 C语言运算符和进制数入门上
摘要
1.C语言printf函数的实现

第5集 C语言运算符和进制数入门下
摘要
1.C语言printf函数的实现
2.数的进制:2进制、10进制、16进制
3.C语言常用运算符
4.数据的基本类型
详细步骤:
2.端口高低电平用二进制的0和1表示,而二进制、十进制、十六进制,它们之间又可以相互转换。
2.1.单片机端口,假设端口号是P4系列,则其下有P4.0(或P4^0)、P4.1、P4.2、P4.3、P4.4、P4.5、P4.6、P4.7。
2.1.在程序中,可以用各个端口指定电平值,也可以直接用P4指定,具体方法:
2.1.1.P4=0x00(表示P4.0=P4.1=P4.2=P4.3=P4.4=P4.5=P4.6=P4.7=0)
2.1.2.P4=0xee=238(表示P4.0=0,P4.1=P4.2=P4.3=1,P4.4=0,P4.5=P4.6=P4.7=1),注意:高4位1110=e,低4位1110=e,当然也可以用十进制238表示。(实际常用的是用十六进制表示)
2.1.3.取反计算:即在二进制中,无论是8位二进制,或16位及32位,其每个位取反,如该1位值:1(0),取反后:0(1)。
2.1.4.学会利用计算器(选程序员模式)换算:二进制、十进制与十六进制之间的转换,非常方便实用。其中:BIN为二进制,OCT为八进制,DEC为十进制,HEX为十六进制。例如:选择二BIN输入1111,立即出现其他进制数值:OCT=17,DEC=15,HEX=F,非常方便快捷。
3.C语言常用运算符:
3.1.算术运算符:
3.1.1.加(+)减(-)乘(*)除(/)
3.1.2.模(余)运算符(%):不允许出现浮点型,余数正负取决于被除数正负
3.1.3.自增(++i,-i,i++,i-
3.2.位运算符:
3.2.1.右移(>>)左移(<<)
3.2.2.按位与(&)
3.2.3.按位或(|)
3.2.4.按位异或(^)
3.2.5.取反(~)
3.3.赋值运算符:
3.3.1.+=加赋值(a+=3等价于a=a+3)
3.3.2.-=减赋值(a-=3等价于a=a-3)
3.3.3.*=乘赋值(a*=3等价于a=a*3)
3.3.4./=除赋值(a/=3等价于a=a/3)
3.3.5.%=求余赋值
3.3.6.|=按位或赋值
3.3.7.^=按位异或赋值
3.3.8.<<=左移位赋值(>>=右移位赋值)
3.3.9.以上算术运算符,在程序中直接赋值运用,并亲自动手验证结果,从巩固和加深印象,跟着老师写代码,
3.3.9.1.算术运算符:“+”、“-”、“*”等运用,“/”、“%”运用
3.3.9.2.位运算符:“<<”、“>>”等运用
3.3.9.3.赋值运算符:0x01<<2=0x64,0x11&0x10=16,0x11|0x10=16,~0x11=0xffee=65518等。
4.数据类型:
4.1.Bit:bits:1,value range:0 to 1;
4.2.Signed char:bits:8,bytes:1;value range:-128 to +127;
4.3.Unsigned char:bits:8, bytes:1;value range:0 to 255;
4.4.Enum:bits:8/16,bytes:1 or 2;value range:-128 to 127,or -32768 to +32767;
4.5.Signed short int:bits:16,bytes:2;value range:-32768 to +32767;
4.6.Unsigned short int:bits:16,bytes:2;value range:0 to 65535;
4.7.Signed long int:bits:32,bytes:4;value range:-2147483648 to +2147483647;
4.8.Unsigned long int:bits:32,bytes:4;value range:0 to 4294967295;
4.9.Float:bits:32,bytes:4;value range:±1.175494E-38 to ±3.402823E+38;
4.10.Double:bits:32,bytes:4;value range:±1.175494E-38 to ±3.402823E+38;
4.11.sbit:bits:1,value range:0 or 1;
4.12.sfr:bits:8,bytes:1;value range:0 to 255;
4.13.Sfr16:bits:16,bytes:2;value range:0 to 65535;
4.14.注意:以上1byte=8bit
5.总结:
5.1.学会printf格式输出
5.2.了解进制数
5.3.学会加减乘除等运算符
5.4.了解数据类型和数值范围
课后练习:printf用法。
枯躁的背后,有成功的喜悦。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-02 10:54:46
已绑定手机

6

主题

31

回帖

216

积分

中级会员

积分
216
发表于 5 天前 | 显示全部楼层
xhl*** 发表于 2025-9-26 11:57
第5集 C语言运算符和进制数入门下
摘要
1.C语言printf函数的实现

谢谢老师审核
枯躁的背后,有成功的喜悦。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-10-02 10:54:46
已绑定手机

6

主题

31

回帖

216

积分

中级会员

积分
216
发表于 5 天前 | 显示全部楼层
第六集:LED闪烁和花式点灯上:
摘要:
1)基于DElay实现的led闪烁
2)函数的使用
3)新建文件,使用模块化编程
重要提示:
一、注意:每次操作前,发现必须要做的事:
1.软件、手册的更新:
(1)软件更新:STC-ISP下载软件必须时刻保持最新版本(目前最新版本STC-ISP-V6.96),否则会出现问题。如果网站连接通信正常,一般软件在打开时会提示:有新版本需要更新,选择“立即下”,保存路径。关闭旧版本,删除旧版本,将新版本快捷方式发送到桌面,重新打开最新版本STC-ISP下载软件。
(2)STC32G手册更新:从ISP软件打开并下载最新手册。
详细步骤:
1.基于DElay实现的led闪烁
1.1.1s=1000ms
1.2.在工程中添加如下语句:
1.2.1.#define MAIN_Fosc 24000000UL  //无符号长整型
Void delay_ms(u16 ms)    //u16=typedef unsigned int
{
U16 i;
do
{
     i=MAIN_Fosc/6000;
While(--i)
}While(--ms);
}
1.2.2.
1.3.语法分析:
1.3.1.While(条件1):先判断(条件1)是否为零(为零=假,不为零=真);条件为真:执行大括号内功能块,条件为假:跳出大括号。
1.3.2.
1.3.3.do
{
}while(条件2);    //do { 执行函数体 } While(条件2),先执行大括号内的功能块一次,后判断(条件2)是否为零(为零=假,不为零=真);条件为真:继续执行大括号内的功能块,条件为假:跳出大括号。
方法一案例:
While(a<20)  
{
Printf(“a的值:%d\r\n”,a)
a++;
}

方法二案例:
do
{
Printf(“a的值:%d\r\n”,a)
a=a+1;  //等效于“a++;”
}while(条件2);
无论‘方法一’或是‘方法二’,都必须在主函数内开始位置或主函数前,预先定义:int a=10;

1.4.Led灯0.5秒闪烁,0.5秒熄灭
1.5.打开原有DEMO工程,另存为led-delay新工程,这样可以便于修改。
1.6.首先在新建工程中添加:
#define MIAN_Fosc 24000000UL   //定义一个主时钟24MHZ
1.7.由于定义放在调用主函数前,所以不需要加分号“;”,也不需要声明。
1.8.如果函数的定义,是放置在调用主函数后面,则需要声明,并在函数末尾加分号。
1.9.接着添加一个延时函数:
1.9.1.先定义:#define delay_ms(u16 ms)(定义在调用主函数前,不需要声明,不加分号“;”)
1.10.测试验证:“a++;”、“++a;”“a--;”“--a;”的区别
方法是同时打印:
int a=10;
Printf(“a的值:%d\r\n”,a)
Printf(“a的值:%d\r\n”,--a)
Printf(“a的值:%d\r\n”,a)

int a=10;
Printf(“a的值:%d\r\n”,a)
Printf(“a的值:%d\r\n”,a--)
Printf(“a的值:%d\r\n”,a)

1.10.1.测试方法:在ISP下载软件,连线PC与单片机设备,程序编译、下载,在ISP软件上的接收缓冲区直观显示程序运行结果。


枯躁的背后,有成功的喜悦。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-3 10:38 , Processed in 0.117946 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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