/ 最小系统板实操 /
一开始控制不了风扇,没达到与其效果,推测是焊接有些地方锡太多,导致连到了旁边
通过一个晚上用小刀挂掉那些可能短路的地方后,最终能让风扇转起来,并且DS18B20温度传感器有效果,四位数码管的显示也没啥大问题了。
/ 焊接注意事项 /
电烙铁头如果是黑的,是因为有氧化层,很难融化锡,先尝试在吸了水的高温海绵上将其抹去,如果没效果再用砂纸或小刀弄去后,再重新给电烙铁上锡。
长时间不用时也需要关掉电源并且给点锡在烙铁头上,防止其氧化。
使用过程中不需要清理烙铁头上的锡,除非是锡挂太多。
挂锡:氧化了的烙铁头即使一直接触锡条也不能将其融化,需要在合适的温度下给电烙铁头上一层锡,然后就能很快的将锡融化。
/ 烧录程序 /
烧录器的RXD对应单片机的TXD(transmit data)
烧录器的TXD对应单片机的RXD(receive data)
需要另外再接VCC(接入电源正极)和VSS(公共接地端电压)
烧录程序时型号一定要选对!!!
/ 开发板 /
/使用keil5注意事项/
使用keil编译之前一定要把生成hex文件的选项勾上。
用keil5给普中的开发板写程序的时候,要把晶振频率改成11.0592MHz
void delay1s()
{
for(int i = 1000; i > 0; i--)
for(int j = 110; j = 0; j++)
} //里面j=113或114时更准、
库函数#include<intrins.h>
intrins 翻译过来就是“本质”“函数”的意思。
其中led = 0xfe提前在while函数前初始化,然后while函数里都用led,不然如果while函数里的第二个led直接用0xfe的话,每次都会重新初始化。导致板子上只能让D2一直亮。
循环左/右移函数
而且_crol_或_cror_时,数据并不会像用<<时那样丢失。例如执行一次_crol_(0x80) 时,只会把左边第一个1给先拿出来,让其他七位的数都往左移一位之后,把刚才的1放回到右边第一位去,所以并不需要用 for函数来控制循环8次。
直接用<<左移运算符时,如果是0x01,左移移位后,右边第一位会自动补0,所以在流水灯程序中得把循环次数控制在8次以内。而且开发板低点位才是点亮led,所以要一个灯亮的话,就得用led = ~(0x01<<1);
用stc烧录软件的时候单片机类型一定要选对。
syntax 句法、语构
Keil C51中的unsigned int是16位的,最大只能显示65535
/c语言/
!和~的区别
C语言中,!是非,~是取反
!是逻辑运算符,~一般用于设置标志位
/ 通过指针引用数组 /
[ ] 是变址运算符,即将a[i]按a+i计算地址
*和++同优先级,结合方向从右而左
*(p++) 先取*p的值,然后使P加1
*(++p) 先使p加1,再去*p
C编译都是 形参数组名 当做指针变量来处理
当数组名做函数参数的时候,如果形参数组中各元素的值发生变化,实参数组元素的值也随之变化。(形参的值就是实参数组首元素的地址)
二维数组a的有关指针变量(c语言247页数组int a[3][4])
表示形式 | 含义 | 值 |
a | 二维数组名,指向a[0] | 2000 |
a[0],*(a+0),*a | 0行0列元素地址 | 2000 |
a+1, &a[1] | 1行起始地址 | 2016 |
a[1],*(a+1) | 1行0列元素a[1][0]的地址 | 2016 |
*[1]+2,*(a+1)+2,&a[1][2] | 1行2列元素a[1][2]的地址 | 2024 |
*(a[1]+2), *(*(a+1)+2),a[1][2] | 1行2列元素a[1][2]的值 | 13 |
/ 定义和使用结构体变量 /
stract 结构体名
{成员表列
}变量名表列;
例:
stract Student
{
int num;
char name[20];
char sex;
int age[];
}student1, student2; // 声明类型的同时定义变量
student1 = {10101, “li lin”, ‘M’, 18}; //初始化
引用结构体
student1.num //表示变量a中的num成员
printf(“num:%ld\nname%s\n”,student1.num, student1.name );