1、51 单片机的那些事儿(四)这一篇谈谈单片机的常用外部设备键盘,直流电机(PWM) 。掌握这些,对于大家单片机应用可以增加一些乐趣。 在这里,就要谈谈 C 语言编程与汇编编写程序的区别。C 语言最大特点是模块化,可移植性能好。不同的处理器只需要修改一部分模块就可以。汇编语言没有模块化,只有顺序执行的主体,和其中的一些跳转和循环。设计到的寄存器一旦因为处理器不同,那么必须将汇编程序中涉及到的寄存器名称都修改一遍。而 C 语言编写程序涉及到移植时候,只需要修改寄存器对应的地址就可以,利用“#define 寄存器名字 对应十六进制的地址”这种方式就可以把整个程序移植成对应的处理器。寄存器寻址在编写程
2、序过程中十分重要,我们处理数据过程中,一旦涉及控制和 I/O 时候,就要对寄存器进行读写操作,如何寻找寄存器呢,就要把寄存器对应到对应的十六进制表示的地址。书归正传,说说键盘的应用方式,与对应驱动代码。键盘一般有两种,有一种叫独立按键,一般是独立的,每个按键对应 I/O口的一位,也就是说,P0 口只能驱动 8 个独立按键。由于单片机复位后,P0口自动设置为 0FFH,就是说 P0 口的 8 个管脚都是高电平,所以,我们只有让管脚电平变为低电平,单片机才知道,有外部信号进入。所以,独立按键一端接 I/O 口的某个管脚,另一个接到 GND,就是接到低电平。读取驱动信号之前,要将对应管脚置为高电平。
3、然后判断按键对应的管脚为低电平之后,做出对应反应。独立按键一般这样判断:例如,我们在 P1.0 管脚上面接一个独立按键,独立按键另一端接在 GND端,那么我们这样判断:P1_0 = 1;If (!P1_0) !P1_0 表示当 P1.0 变为低电平时候,!P1.0 变为 1 这里是对应的处理程序;独立按键虽然编写程序简单,但是浪费资源,51 单片机只有 32 个标准 I/O 管脚,浪费就是最大的犯罪。所以,为了节约资源,引入矩阵键盘。顾名思义,矩阵键盘是方形的,一般是 4X4 结构,利用 8 个管脚,驱动 16 个按键。四行的按键 A 端都依次接在低四位,四列按键的 B 端依次接在高四位。我们
4、把键值编为 1 2 3 45 6 7 89 10 11 1213 14 15 16对此,我引入了一位高人编写的键值判断程序:uchar Keyscan(void)uchar i,j, temp, Buffer4 = 0xfe, 0xfd, 0xfb, 0xf7;for(j=0; jsbit drv = P10;void Time0_Init()TMOD = 0x01;TH0 = 0x4c;TL0 = 0x00;IE = 0x82;TR0 = 1;void Time0_Int() interrupt 1drv! = drv;TH0 = 0x4c;TL0 = 0x00;void main() drv = 0;Time0_Init();while(1);While(1);的作用和 LOOP : AJMP LOOP 作用一样,就是一个死循环,表示一直等待。本篇先告一段落,下一篇讲讲 LCD1602,以及 DS18B20 的驱动方式和驱动原理。之后再谈谈 IIC 总线的调用方式。谢谢!