二进制、十进制和十六进制
二进制前缀:0b
十六进制前缀:0x
对于二进制来说,8位二进制称之为一个字节,二进制的表达范围值是从0b00000000~0b11111111,而在程序中用十六进制表示的时候就是从0x00到0xFF,这里教大家一个二进制转换十进制和十六进制的方法,二进制4位一组,遵循8/4/2/1的规律,比如0b1010,那么从最高位开始算,数字大小是8*1+4*0+2*1+1*0=10,那么十进制就是10,十六进制就是0xA。
C语言变量类型和范围
字符型 | unsigned char | 0~255 |
signed char | -128~127 | |
整型 | unsigned int | 0~65535 |
signed int | -32768~32767 | |
长整型 | unsigned long | 0~4294967295(0~2^32) |
signed long | -2147483648~21747483647 | |
浮点型 | float | -3.4×10^-38~3.4×10^38 |
double | C51里等同于float |
C语言基本运算符
+、-、*、/、%、++、--、移位操作,其中<<代表的是左移,>>代表的是右移、取反:~、
++b=b+1;
b++的值是b+1之前的值
Keil调试
进入debug模式,除了可以看程序运行了多长时间外,还可以观察各个寄存器、各个变量的数值变化情况。单击View菜单里的Watch Windows→Watch 1,可以打开变量观察窗口,如图4-11所示。
图4-11 变量观察窗口
在这个窗口内,可以通过双击或按F2键,然后输入想观察的变量或寄存器的名字,后边就会显示出它的数值
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
unsigned int i = 0; //定义循环变量i,用于软件延时
unsigned char cnt = 0; //定义计数变量cnt,用于移位控制
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while(1) //主循环,程序无限循环执行该循环体语句
{
P0 = ~(0x01 << cnt); //P0等于1左移cnt位,控制8个LED
for (i=0; i<20000; i++); //软件延时
cnt++; //移位计数变量自加1
if (cnt >= 8) //移位计数超过7后,再重新从0开始
{
cnt = 0;
}
}
}