51——流水灯
概念定义
1. 宏定义
#define uchar unsigned char (不加分号,预处理语句)
typedef uchar unsigned char (加分号)
2. 延时函数
void delay(unsigned int z)
{
unsigned int x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
给形参z赋值,如延时100ms,delay(100);
3. 循环移位函数
#include <intrins.h>
void test_crol (void) {
unsigned char a;
unsigned char b;
a = 0xFE; //1111 1110
b = _crol_(a,1); // b now is 0xFD 1111 1101
}
字符型循环左移:_ crol_
字符型循环右移:_ cror_
a = 0xFE; //1111 1110
b = a<<1; // 1111 1100
循环移位函数和左移/右移运算符区别:
循环左移是把最高位移到最低位上,左移运算符是把最高位移除最低位补0
4. 注意
函数先声明,再使用
代码
1. 流水灯代码
#include <reg52.h>
#include <intrins.h>//crol函数需要
#define uint unsigned int
#define uchar unsigned char
uchar temp;//LED灯相关变量
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void main() //main函数自身会循环
{
temp = 0xfe;
P1 = temp;//1111 1110
delay(100);
while(1)
{
temp = _crol_(temp,1);
P1 = temp;
delay(100);
}
}
2. debug
机器汇编语言,不要也罢,直接叉掉!
修改晶振(先点那个锤子
选择io口
看debug的作用
硬件仿真
问题
神特么单片机小精灵???