}
P0 = 0XFE;
for(i = 0; i<30000; i++); P0 = 0XFD;
for(i = 0; i<30000; i++); P0 = 0XFB;
for(i = 0; i<30000; i++); P0 = 0XF7;
for(i = 0; i<30000; i++); P0 = 0XEF;
for(i = 0; i<30000; i++); P0 = 0XDF;
for(i = 0; i<30000; i++); P0 = 0XBF;
for(i = 0; i<30000; i++); P0 = 0X7F;
for(i = 0; i<30000; i++); }
13、移位指令(<< >>)、取反指令(~)。 14、程序二:流水灯程序(法二) # include
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
void main() {
unsigned char cnt = 0; unsigned int i = 0; ENLED = 0; ADDR3 = 1;
ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;
} 作业:
4、独立完成流水灯右移操作。
5、独立完成左移到头,接着右移,右移到头,接着左移的程序。
Lesson 5 定时器和数码管基础
1、逻辑运算 逻辑与:&& 逻辑或:|| 逻辑非:! 按位与:& 按位或:| 按位取反:~ 按位异或:^
while(1) {
P0 = ~(0x01<
cnt = 0;
0b11001100 |0b11110000 等于0b11111100 2、数字电路常用符号
3、机器周期是定时器的计数周期,打开定时器后,每经过一个机器周期,定时器“存储寄存器”的值加1。 8位定时器存储的值的范围:0-225 16位定时器0-65535 4、标准51里有两个定时器:T0和 T1。 5、定时器/计数器模式示意图。 5、使用定时器的方法
一、设置TMOD(模式寄存器M1、M0位,常用模式1、模式2自动重装),配置好工作模式 例如:TMOD = 1; 二、设计数寄存器 TH0 、TL0的初值。例如:TH0 = 0XB8; TL0 = 0X00;定时20ms TH0 = 0XB8; TL0 = 0X00; 定时1ms 三、设TCON(控制寄存器 TF位,TR位),通过TR0置1来让定时器开始计数 例如:TR0 = 1; 四、判断TCON寄存器的TF0位,检测定时器的溢出情况。
计算计数寄存器初值的方法:12*(65536-X)/11059200 = 20ms
6、1s闪烁一次的小灯程序 #include
sbit LED = P0^0; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
void main() {
while(1) {
if(TF0 == 1) {
TF0 = 0; TH0 = 0XB8; TL0 = 0X00; cnt++; if(cnt >= 50) {
cnt = 0; LED = ~LED;
//定时20ms
TMOD = 0x01; TH0 = 0XB8; TL0 = 0X00; TR0 = 1;
unsigned char cnt = 0; ENLED = 0; ADDR3 = 1;
ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;
}
}
} }
7、数码管分: 位、段(A/B/C/D/E/F/G/DOP)两个概念 8、第一个数码管显示“1”的程序 #include
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
void main() { }
P0 = 0XF9; while(1);
unsigned char cnt = 0; ENLED = 0; ADDR3 = 1;
ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;
9、 1位数码管从1-F(每隔1秒加1) #include
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;
unsigned char code ledchar[] = {0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,
void main() {
TMOD = 1; TH0 = 0XB8; TL0 = 0X00; TR0 = 1; while(1) {
if(TF0 == 1) {
TF0 = 0; TH0 = 0XB8;
unsigned char cnt = 0; unsigned char sec = 0; ENLED = 0; ADDR3 = 1;
ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;
0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
TL0 = 0X00;