图15-4所示是STC单片机应用系统学习板电路原理图。在学习板中,核心器件是STC15W4K32S4单片机,PDIP40封装。这款单片机抗干扰性强,加密性高,可很方便地编程下载程序。STC15W4K32S4单片机的I/O端口引脚排列与传统89C51单片机不一样,但其端口功能和使用方法与经典单片机完全一致。下面利用这个STC单片机学习板完成几个典型实验。
图15-3 STC单片机应用系统学习板结构图
图15-4 STC单片机学习板电路原理图a)
图15-4 STC单片机学习板电路原理图b)
图15-4 STC单片机学习板电路原理图c)
实验一 数码显示
1.实验要求
使用STC单片机学习板将30H~33H单元中存放的压缩BCD码送数码管显示。
2.实验原理说明
74HC595是一款16引脚封装,具有8位串行输入、8位串行或并行输出功能的器件,串行移位速度达100MHz,输出寄存器可以直接清除。芯片各引脚功能如下:
Q0~Q7:并行数据输出端。
QH:串行数据输出,连接下一个595,用于多个芯片级联。
主复位端,低电平有效,工作时禁止复位,应接+5V。
SRCLK:移位寄存器时钟输入端,与单片机I/O口连接作时钟线。
RCLK:数据锁存,高电平有效,低电平时允许数据输入。与单片机I/O口连接作锁存控制。:允许输出端,低电平有效。正常输出数据时该引脚应接地,使数据输出始终有效。
SER:串行数据输入端,与单片机I/O口连接作数据输入线。
移位寄存器有一个串行移位输入(SER)、一个串行输出(QH)和一个异步低电平复位端,存储寄存器有一个并行8位的,具备三态的总线输出,当OE=0,允许存储寄存器的数据输出到总线。单片机的端口从低位开始移位输出数据到74HC595。单片机串行发送一字节数据后,单片机最先移位输出的最低位(D0)送入74HC595的Q7,最后移位输出的高位(D7)送入74HC595的Q0。
3.算法思路
数码显示电路按照图15-4所示设计,采用2片74HC595驱动作8位动态数码显示,其数码管采用共阴极接法。进行显示时,先把要显示的数字查表找到对应的笔形码,再通过串行总线输出。实际编程输出数据时,先要置RCLK为低电平,然后送出8位的位选码,再逐位输出8位段选码,数据位在每个时钟高电平时移位输入到74HC595中,待16位数据输入完成后,最后置RCLK为高电平锁存输入的数据。在30H~33H中存放了要显示的源数据,每个单元存放压缩BCD码,需要将其高低4位分离,分离后的BCD码存放在40H~47H中。程序采用主从结构,主程序负责设置初值、传递参数,再调用相应子程序;具体工作由各个子程序完成。参考程序代码如下:
实验二 液晶显示
1.实验要求
使用带字库的12864点阵图形式液晶屏做液晶显示实验,要求:①实现对液晶显示清屏;②控制液晶屏的第1行显示“东华理工大学”,第2行显示“电子信息工程专业”,第3行显示“教育部电子卓越班”,第4行显示“www.ecit.edu.com”。
2.实验原理说明
带字库的12864液晶屏是内部采用ST7920控制器,在平板上排列64点行和128点列的点阵,形成矩阵式晶格点,其液晶屏的接口连接电路可计算出液晶屏数据存储器地址,并通过写入液晶屏的命令和数据地址实现数据显示。
实验在如图15-4所示的STC学习板上进行,采用XL12864与单片机直接I/O接口方式,将液晶屏的接口信号线依序接入J12插座。其中单片机P0口作数据线,P2口作接口控制信号,连接关系与操作令见表15-1。其中VO是对比度调节端;EN是使能信号,当EN=0时,允许对液晶屏的指令寄存器进行写操作;当EN=1时,允许对数据存储器进行写操作;是数据读/写控制信号;RS是数据/命令选择控制信号,当RS=0时传输数据写入指令寄存器作命令,当RS=1时传输数据写入数据存储器作显示;PSB是串行/并行模式传输数据选择控制信号,当PSB=0时,串行模式,当PSB=1时,并行模式传输数据;RST是复位信号,低电平有效。
表15-1 单片机控制信号与液晶屏操作指令
(1)清除显示(Clear)和地址归0(Home)
将DDRAM填满“20H”(空格)代码,并且设定DDRAM的地址计数器(AC)为00H;更新设置进入设定点将I/D置为1,游标右移AC自动加1,即可清除显示。
如果设定DDRAM的地址寄存器为00H,并且将游标移到开头原点位置,即可地址归0(这个指令并不改变DDRAM的内容)。
(2)进入设定点,初始值06H
指定在显示数据的读取与写入时,设定游标的移动方向及指定显示的移位,S显示画面整体位移。
当I/D=1,游标右移,DDRAM地址计数器加1;I/D=0,游标左移,DDRAM地址计数器减1。
当S=1、I/D=1时,画面整体左移;当S=1、I/D=0时,画面整体右移。
(3)显示开关设置,初始值08H
控制整体显示开关、游标开关和游标位置显示反白开关。
D=1整体显示开;D=0整体显示关,但是不改变DDRAM内容。C=1游标显示开;C=0游标显示关。B=1游标位置显示反白开,将游标所在地址上的内容反白显示;B=0正常显示。
(4)游标或显示移位控制
该指令不改变DDRAM的内容。
(5)功能设定
DL是8/4位接口设定:DL=1时为8位MPU接口;DL=0时为4位MPU接口。
RE是指令集选择控制位:RE=1为扩充指令集;RE=0为基本指令集。同一指令的动作不能同时改变DL和RE,需先改变DL再改变RE,才能确保设置正确。
(6)设定CGRAM地址(www.xing528.com)
设定CGRAM地址到地址计数器(AC),AC范围为00H~3FH,需确认扩充指令中SR=0。
(7)设定DDRAM地址
设定DDRAM地址到地址计数器(AC),第1行AC范围为80H~8FH;第2行AC范围为90H~9FH;第3行AC范围为88H~8FH;第4行AC范围为90H~9FH。
(8)读取忙标志和地址
读取忙标志以确定内部动作是否完成,同时可以读出地址计数器(AC)的值。
(9)写显示数据到RAM
当显示数据写入后会使AC值改变,每个RAM(CGRAM、DDRAM、IRAM)地址都可以连续写入2个字节的显示数据,当写入第2个字节时,地址计数器(AC)的值自动加1。
(10)读取显示RAM数据
读取后会使AC值改变,设定RAM(CGRAM、DDRAM、IRAM)地址后,先要对RAM进行试读一次后才能读取到正确的显示数据,第二次读取不需要试读,除非重新设置了RAM地址。
3.程序设计思路
使用液晶显示时,先开电源,然后依次打开显示、显示光标、清屏和光标移到设定位置,完成液晶显示初始化。
ST7920的字型产生ROM通过8192个16×16点阵的中文字型,以及126个16×8点阵的西文字符,用2个字节来提供编码选择,将要显示的字符编码写到DDRAM上,硬件将依照编码自动从CGROM中选择将要显示的字型显示到屏幕上。
ST7920的字型产生RAM提供用户自定义字符生成(造字)功能,可提供4组16×16点阵的空间,用户可将CGROM中没有的字型自定义到CGRAM中。
显示RAM提供64×2 B的空间,最多可以控制4行、每行8个汉字(16×16点阵)的中文字型显示。当写入显示资料RAM时,可以分别显示CGROM、HCGROM及CGRAM的字型。
三种字型的选择:
1)显示半宽字型:将一个字节的编码写入DDRAM中,范围是02~7FH。
2)显示CGRAM字型:将2个字节的编码写入DDRAM中,共有0000H、0002H、0004H及0006H四种编码。
3)显示中文字型:将2个字节的编码写入DDRAM中,先写高8位,后写低8位,范围是A140H~D75FH(BIG5)、A1A0H~F7FFH(GB)。
ST7920提供240点的ICON显示,由15个IRAM单元组成,每个单元有16位,每写入一组IRAM时,需先写入IRAM地址,然后连续送入2个字节的数据(先高8位、后低8位,即D15~D0)。
要输出4行中文、英文信息实现液晶屏显示时,先把要显示信息生成字形码表格,然后确定显示位置(行地址)写入到液晶指令寄存器,然后查表找出要显示的信息码写入显示存储器。系统时钟设置为22.1148MHz,采用12T模式。控制输出显示4行信息程序设计如下:
实验三 按键输入与数码显示
1.实验要求
用图15-4中的4×4键盘和数码显示电路,设计键盘输入显示程序,键盘16个按键的键值为十六进制数0~9、A~F,要求按下一个键在低位显示1个数值,最多显示8位,新输入一个键值移入到低位,最高位溢出;要有高位灭0功能,即若输入的高位为0,则不显示。若八位数都是0,则在低位只显示一个0。
2.实验原理说明
显示用2个74HC595驱动8位数码显示,键盘使用P0口作4×4矩阵键盘接口,其中P0.0~P0.3作4列,P0.4~P0.7作4行,数码显示和键盘电路接口如图15-4所示。键盘中16个按键有键值(如0~9键),每个键值对应唯一键码,键码是单片机识别按键的特征码。键码的编制方法是:与按键相连的2个I/O口线为0,其他6个I/O口线为1,这就是这个按键唯一的特征码,例如,键盘中SW24键的特征码是0EEH,SW25键的特征码是0EDH,依此方法可编写出16个按键的特征码。
3.设计思路
程序采用主从结构,主程序负责初始化使用单元,对其置初值、传递参数,然后再依次调用按键扫描子程序和显示子程序。按键扫描子程序采用线反转法编写,即先送4位行线为低电平、再读4位列线值保存;然后送4位列线为低电平、读出4位行线值;将读出的行线值与保存的列线值组合成8位键码得到按键的特征码。再采用这个特征码查键码表对比得到键值,由键值再查字形表得到对应的笔形码,最后输出显示键值。
键盘扫描采用线反转法,由于STC15xx系列单片机的I/O口具有4种工作模式,故在使用P0口作行、列信号输入/输出转换时,应及时切换模式:通过P0M1、P0M0工作模式配置寄存器设置P0口的工作模式,否则读P0口时始终为00。因此,用P0作输出时,应置为I/O输出模式(即模式0);当读P0口时,应将P0口设置为仅输入(高阻)模式(即模式2),这样才能正常实现输出列信号、读入行信号,完成对键盘线反转法扫描读出按键特征码。
用40H~47H作显示单元,其中40H存放显示值最低位,47H存放最高位。在数码显示时,按照按键输入习惯,刚输入的键值应显示在最低位,前面输入的键值要被推挤到高位显示。因此,数值显示前,每次要判断是否有新键输入。当有新按键输入时,先要对存储单元的键值进行队列调制:即当输入一个新键值后,对当前显示的8位数字,先放弃最高显示位,最高位显示存储单元被次高位的显示存储单元内容覆盖,其他存储单元依次由低位覆盖高位,使显示值依次向高位移动一个数位,再把新键值放入最低位存储单元。系统时钟设置为11.0592MHz,采用12T模式,具体程序设计代码如下:
实验四 秒表设计
1.实验要求
设计一个秒表,要求秒显示4位整数、3位小数(ms),显示精确到1ms。
2.实验原理说明
使用单片机定时器T0,工作在方式0作16位定时/计数器,定时1ms中断一次,采用自动重装载初值模式。设置2字节的ms计数单元,每中断一次,ms计数单元按压缩BCD码数制累加。当ms单元累计到1000就进位,此时把ms计数单元清0,秒计数单元按压缩BCD码累加。
3.设计思路
程序采用中断结构,主程序负责定时器初始化和使用单元置初值、传递参数,然后调用在“实验一”中设计好的显示子程序。定时中断负责计数累加。
假设芯片系统时钟设置为SYSclk=12MHz,12T模式T0x12=0,定时1ms初值计算为
则定时初值=64536D=0FC18H。
4.资源分配
采用30H、31H作2字节压缩BCD码s计数单元,30H为高位,31H为低位;32H、33H作2字节压缩BCD码ms计数单元,32H为高位,33H为低位。用40H~47H作显示单元,将BCD码计数单元的高、低4位分离存放在其中。显示电路如图15-4所示,参考程序代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。