一看就懂——DIY单片机开发板教程
流。而基极上需要0.63mA,为了减小三极管的负荷应使三极管过饱和,,调节R1 使基极电流为2mA,此时测得集电极和漏极之间的电压约0.1V。好!此时R1 为2K。R2 为240 欧姆。确定。
接下来就是确定电路。电路的接口与AT89S51 间有三组接口:段码、位码和电源。为了让AT89S51 独立出来这三级接口都采用插针做接口,用排线自由连接到AT89S51 的P1-P3 口,电源用短路帽连接,完成后的板子见下图:
然后就是写程序。先写个查询方式的吧!
//六位管码管在以0.3 秒的间隔在闪烁,这是采用查询方式的,比较占CUP 资源
当我插把程序写入片子,插上电运行时,是乱码。你猜怎么回事?
原来那个P2 口方向是反的,您注意过没有,在AT89S51 管脚排列上,P0--P1 和P3 都是上方为PX_0。而唯独P2 口管脚排列是下方为P2_0。方向则好是反的。既然反了,我就把段码表重写一下。再试,一切正常。
在这里我说一下段码的排列,好多人问数码管段码是如何排列的,我也在网上查了,好像没有什么标准的排法,随自己的接法而定,这也是导致为什么在网上下载的一些数码管程序在自己的板子上不能正常显示的原因。就普遍而言我最上面的那张图示的标法最多,在上面程序里原打算也是P2_0 对应段码a(也就是上面的横)。一直到P2_7 对应段为h(就是小数点)。结果哪知道P2 口刚好是反的。这样一来也就是倒过来了,P2_0 对应段h(小数点了)。例如我原先定义的数码管显示"2"段码为10100100B 的,一接反了就不再是"2"了。而要想再显示"2"那就把段码的高低位倒过来。改为00100101B 就OK 了。
下面再写个用中断来显示的:
5.自制单片机之五……LCD1602的驱动
(1)……LCD1602的驱动
LCD1602 已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780 液晶芯片的,控制原理是完全相同的,因此HD44780 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型LCD 通常有14 条引脚线或16 条引脚线的LCD,多出来的2 条线是背光电源线VCC(15 脚)和地线GND(16脚),其控制原理与14 脚的LCD 完全一样,定义如下表所示:
HD44780 内置了DDRAM、CGROM 和CGRAM。
DDRAM 就是显示数据RAM,用来寄存待显示的字符代码。共80 个字节,其地址和屏幕的对应关系如下表:
也就是说想要在LCD1602 屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H 地址写入"A"字的代码就行了。但具体的写入是要按LCD 模块的指令格式来进行的,后面我会说到的。那么一行可有40 个地址呀?是的,在1602 中我们就用前16 个就行了。第二行也一样用前16 个地址。对应如下:
我们知道文本文件中每一个字符都是用一个字节的代码记录的。一个汉字是用两个字节的代码记录。在PC 上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS 里都固化有字符字模。什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。例如"A"字的字模:
上图左边的数据就是字模数据,右边就是将左边数据用"○"代表0,用"■"代表1。看出是个"A"字了吗?在文本文件中"A"字的代码是41H,PC收到41H 的代码后就去字模文件中将代表A 字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到"A"这个字了。
刚才我说了想要在LCD1602 屏幕的第一行第一列显示一个"A"字,就要向DDRAM 的00H 地址写入"A"字的代码41H 就行了,可41H 这一个字节的代码如何才能让LCD 模块在屏幕的阵点上显示"A"字呢?同样,在LCD 模块上也固化了字模存储器,这就是CGROM 和CGRAM。HD44780 内置了192 个常用字符的字模,存于字符产生器CGROM(Character Generator ROM)中,另外还有8 个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。下图说明了CGROM 和CGRAM 与字符的对应关系。
从上图可以看出,"A"字的对应上面高位代码为0100,对应左边低位代码为0001,合起来就是01000001,也就是41H。可见它的代码与我们PC 中的字符代码是基本一致的。因此我们在向DDRAM 写C51 字符代码程序时甚至可以直接用P1='A'这样的方法。PC 在编译时就把"A"先转为41H 代码了。
字符代码0x00~0x0F 为用户自定义的字符图形RAM(对于5X8 点阵的字符,可以存放8 组,5X10 点阵的字符,存放4 组),就是CGRAM 了。后面我会详细说的。
0x20~0x7F 为标准的ASCII 码,0xA0~0xFF 为日文字符和希腊文字符,其余字符码(0x10~0x1F 及0x80~0x9F)没有
下一篇:Optosafe将把Quanergy公司的LiDAR传感器集成进入产品——Opto-Q-Guard快速部署视频监视塔
- 单片机在电源设计中的应用(06-07)
- 基于单片机的锅炉液位控制装置设计(07-22)
- 基于SPWM的交流稳压电源设计方案(09-15)
- 基于单片机的电池保护电路系统设计(02-24)
- 晶闸管三相全控桥式整流电路的直流电源设计(02-08)
- 智能充电设备控制系统的硬件设计方案(02-14)