LED正负极:大红旗——负极,小红旗——正极
如何看原理图电阻/电容值:
eg:
102 = 10 2 = 10 * 10 ^ 2 = 1000
473 = 47 3 = 47 * 10 ^ 3 = 47000
单片机使用TTL电频:高电平(逻辑1)5V 低电平(逻辑0)0V
单片机上电的时候所有的IO口默认都是高电平
LED一端接VCC(正极)一端接芯片P20-P27口,P20-P27口在芯片中由P2寄存器映射,当芯片输出高电平时LED不亮,输出低电平时亮
如果只要第一个LED亮则P2寄存器赋值1111 1110
最低位为0输出低电平,在代码中使用十六进制表示
#include <REGX52.H>
void main(){
P2 = 0xfe; // 1111 1110
while(1){}
}
单片机执行完main函数后会再次重复执行main
Keil -> options for target -> output -> create hex file
HEX文件格式是一种能够烧写到单片机中,被单片机执行的文件格式。可以使用不同的编辑器将C或汇编源文件编译成HEX文件,如IAR,KEIL等
单片机系统频率:12MHz,一秒运行一百万次
通过STC-ISP->软件延时计算器生成延时方法
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_(); // 空语句,INTRINS.H中声明
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
在单片机里int是16位的(unsigned int: 0 ~ 65535 int:-32768 ~ 32767)
void Delayxms(unsigned int xms) // 指定延时时间ms
{
unsigned char i, j;
while(xms--){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
在REGX52.H头文件中定义了各寄存器及其各位
sfr P2 = 0xA0;
/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;
独立按键接MCU的P30-P33口,使用寄存器P3的前四位映射,按下为0,松开为1
按键消抖:
由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
按键的消抖有两种方法:
- 加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!
- 通过软件来进行一个延迟函数,把这个消抖进行操作!
独立按键控制LED显示二进制:
使用unsigned char
型变量表示寄存器:无符号字符型(所占1字节 = 8bit位)刚好对应着8位二进制的数据
unsigned char p = 0;
while(1){
if(P3_1 == 0){
Delayxms(20);
while(P3_1 == 0);
Delayxms(20);
p++;
P2 = ~p;
}
}
局部变量定义要放在函数里的第一行,在main函数,for、while、if里面也要放第一行,只要是局部变量的定义都要放在所在函数体内的第一行