基于51单片机的人机接口电路设计(贺铁梅)2012.09.08

合集下载

简单51单片机开发板的电路设计

简单51单片机开发板的电路设计

简单51单片机开发板的电路设计51单片机开发板电路设计详细步骤及说明如下:一、准备工作1.定义开发板功能需求:根据具体需求确定开发板所需的功能模块,如AD转换、LCD显示、键盘输入等。

2.确定系统时钟源:选择合适的晶振,并确定时钟源用于驱动单片机。

二、电源设计1.选择适当的电源电压:根据单片机的工作电压范围选择合适的电源电压,并设计电源电路。

2.设计稳压电路:根据电源要求设计合适的稳压电路,保证单片机工作时电压稳定。

三、时钟电路设计1.选择合适的晶振:根据系统时钟需求选择合适的晶振,并设计相应的晶振电路。

2.设计时钟源电路:根据晶振的工作参数设计合适的时钟源电路,确保时钟信号稳定且频率准确。

四、复位电路设计1.根据单片机复位要求设计复位电路,保证单片机正常复位。

2.设计复位延时电路:根据需要设计复位延时电路,保证单片机复位后稳定运行。

五、外部IO电路设计1.根据开发板需求,设计并布局合适的IO接口电路,如LED指示灯、按键输入接口等。

2.设计并连接AD转换电路:根据需求设计和连接AD转换电路,实现模拟信号的采集和处理。

六、通信接口电路设计1.根据需求设计并连接串口接口电路,实现与其他设备的通信。

2.根据需要设计并连接其他通信接口电路,如SPI、I2C等。

七、存储器电路设计1.根据需求设计并连接存储器电路,如RAM、ROM等。

2.根据需要设计和连接外部存储器接口电路,实现扩展存储器的功能。

八、电路调试与优化1.完成电路设计后,进行电路连线、焊接等工作,并检查和修正可能存在的错误。

2.进行电路测试并优化,确保电路正常工作,并根据需要进行性能优化。

九、布局设计与外壳制作1.进行电路板的布局设计,合理安排各个模块的位置。

2.制作外壳和连接线,并进行电路板的安装。

最后,完成电路设计之后,可以进行软件编程和调试,将单片机与外设模块进行连接和通信,实现开发板的各项功能。

【精品毕设】基于51单片机类人机器人智能巡线的设计与实现

【精品毕设】基于51单片机类人机器人智能巡线的设计与实现

毕业设计指导课基于51单片机类人机器人智能巡线的设计与实现摘要:针对类人机器人如何在规定的赛道上实现智能巡线行走的问题,提出采用利用灰度传感器识别赛道,并以51单片机为核心对机器人编程控制的方法,实现该类人机器人通过识别白色光敏带赛道,遇到转弯信号能及时反馈并准确转弯的功能。

通过脱机运行、步态调试和现场模拟等实验表明,基本实现类人机器人在规定赛道智能巡线行走,但存在反应调整时间长、速度较慢等问题还未有效解决。

经过适当改造之后,该机器人既能克服传统类人机器人结构复杂行走不稳的缺点,又可以在一定程度上模仿人类行走动作,实现在复杂外部环境地形内探测行走的问题。

关键词:智能巡线;灰度传感器;51单片机;类人机器人Design and Implementation of Intelligent Robot Tracking Control SystemBased on 51 SinglechipAbstract: For how the humanoid robot in the provisions of the track to achieve intelligent patrol line walking problem,proposed to use the gray sensor to identify the track and 51 single-chip as the core of the robot programming control method, To achieve the type of human robot through the identification of white light-sensitive track, encountered turn signal can be timely feedback and accurate turning function. Off-line operation, gait debugging and field simulation experiments show that the basic realization of the humanoid robot in the provisions of the track intelligent patrol line walking, but there is a long time to adjust the reaction, the speed is slow and other issues have not been effectively resolved. After appropriate modification, the robot can overcome the shortcomings of the traditional humanoid robot structure complex movement instability, but also to a certain extent, imitate the human walking action, in the complex external environment to detect the problem of walking within the terrain.Keywords: Intelligent inspection line; Gray scale sensor; 51 single chip; Humanoid robot目录目录 (1)第一章引言 (2)1.1选题背景及意义 (3)1.2 国内外研究现状 (3)1.3本文主要研究内容及章节安排 (3)第二章类人机器人的设计及控制 (3)2.1 类人机器人的智能巡线系统设计 (3)2.2 系统的优越性 (4)第三章硬件设计 (5)3.1 51单片机的电路设计 (5)3.2 灰度传感器的使用 (5)3.3 C型足的设计 (5)第四章总结 (6)参考文献 (7)第一章引言1.1选题背景及意义机器人技术是一项有远大前景的技术,不仅在科学、军事、工业、生活领域变得越来重要,而且智能教育机器人的研究也越来越普及。

第7章51单片机人机交互课件

第7章51单片机人机交互课件

选通第二个三极管
送数字1
延时
选通第三个三极管
送数字2
延时
第第47章章 5M1单CS片-5机1单人片机机交系互统功能的扩展
五、LED控制的单片机程序设计
1. 图7-4 LED静态显示电路的应用汇编语言编程如下:
ORG 0000H
LJMP MAIN
ORG 0010H
;-------------第一片74LS74工作-------------
第第47章章 5M1单CS片-5机1单人片机机交系互统功能的扩展
2. 动态显示方式
动态显示方式是指一位一位地轮流点亮每位显示器,即 每个数码管的位选被轮流选中,多个数码管公用一组段 选。
显示时,段选控制相应字符段选码,位选控制该显示 位的电平。并保持延时一段时间,以造成视觉暂留效果。 刷新周期一般约为50ms。
动LED。当单片机的I/O端口PXX为高电平时,反相器
输出低电平,LED发光;当单片机的I/O端口为低电平
时,反相器输出高电平,没有电流流过LED,LED熄灭。
7406
VCC
LED
R
PXX
Vcs
Vf
图7-2 单个LED的驱动接口电路
限流电阻计算如公式(7-2)所示
R Vcc VF Vcs
IF
(7-2)
第第47章章 5M1单CS片-5机1单人片机机交系互统功能的扩展
三、LED数码管的工作方式
LED数码管显示器常用的工作方式又可分为: 静态方式显示和动态方式显示两种。
在设计过程中可以根据系统总体资源分配情况, 选择合适的方式。
第第47章章 5M1单CS片-5机1单人片机机交系互统功能的扩展
1. 静态显示方式

第8章 51单片机人机接口设计

第8章 51单片机人机接口设计

(3)键盘的三种工作方式
① 编程扫描方式(查询方式) ② 中断工作方式 ③ 定时扫描方式
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
8.3
键盘抖动及消除
由于键盘的机械特性,键盘在按下和松开的过程中会存在 抖动过程,具体如图所示:
键抖动可能导致计算机将按键操作识别为多次操作。为 了消除干扰,必须采取措施消除抖动。

按键的识别过程及程序
(1)逐行/列扫描法 ① 所有输出口输出0,读取输入口; ② 如果输入口全为1,重新执行第1步, 否则; ③ 输出(列)口逐个送0,读取输入口 全为1,下一个输出口送0,否则; ④ 记录当前列值N,同时进行行扫描; 记录行值M。 计算获取键值=(M-1)×4+N
8051
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
8.2.2非编码键盘
(1)独立式键盘
特点: 一键一线。 优点: 结构简单,键容易识别。 缺点: 占用较多I/O口线, 不便组成大型键盘。
P0 .0 P0.1 P0.2 P0.3
+5V
S1 S2 S3 S4
8051
(2)矩阵式键盘
特点: 把检测线分成二组,一组为行线,另一组为列线,按键放 在行线和列线的交叉点上。或称为:输入口和输出口。 优点: 键盘规模可扩大。 8051 缺点: 键盘分析程序较复杂。
f
g e d
b
c dp
共阴极
共阳极
+5V
a b c
d e f g dp (a)
a b c d e f g dp (b)
为了让数码管能正确显示数字或字母,须点亮相 应的段,这样就需要对其译码。在译码方式上主要有 两种,硬件和软件。 无论是硬件译码还是软件译码,实际是都是给出 要显示数字或者字符的段码。

基于MCS—51单片机的安全报警系统的设计

基于MCS—51单片机的安全报警系统的设计

基于MCS—51单片机的安全报警系统的设计作者:梅桂静岳立喜卢艳楠尹金枝来源:《价值工程》2013年第21期摘要:随着城市人口增加,住宅小区增多,小区居民的安全防范要求增强。

目前,出现了智能住宅安全防范系统,本文对安全报警系统进行了研究,提高了防盗系统的智能化水平。

Abstract: As the urban population increases, the residential district increased, and the demand for security of residents is higher. The paper studies the safety alarm system, improving the intelligence level of anti-theft systems.关键词:安全防范系统;防盗报警系统;单片机Key words: security and protection system;burglar alarm systems;single-chip microcomputer中图分类号:TP311 文献标识码:A 文章编号:1006-4311(2013)21-0203-020 引言随着人口增加,住宅小区增多,小区居民的安全防范要求增强。

目前,多采用防盗门窗装防盗网措施,难以满足要求,出现了智能住宅防范系统。

该系统由安全对讲系统、防盗报警系统、火灾报警系统和防煤气泄漏系统组成。

本文对以单片机为核心的报警系统进行了设计,实际使用时,还可加摄录像,报警时启动自动录像,完善监控报警系统。

1 硬件系统与功能1.1 简介硬件系统包括MCS-51单片机、红外探测器、电话接口电路、串行输入电路、自动复位电路、电源电路等元部件。

将带锁定功能的开关控制红外线发射器安装在保险门锁上,当门反锁时红外线发射器给电启动。

如果有人不开锁直接进入房间,红外探测器随即将探测到人的信号传输至单片机,单片机根据已设定的程序作出是否报警的判断。

51单片机控制四相步进电机电路图9页word文档

51单片机控制四相步进电机电路图9页word文档

51单片机控制四相步进电机接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。

这几天给自己的任务就是搞定步进电机的单片机控制。

以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。

今天从淘宝网买了一个EPSON 的UMX-1型步进电机,此步进电机为双极性四相,接线共有六根,外形如下图所示:拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为360/(4×5)=18度。

地线与四线接触的顺序相反,电机的转向也相反。

如果用单片机来控制此步进电机,则只需分别依次给四线一定时间的脉冲电流,电机便可连续转动起来。

通过改变脉冲电流的时间间隔,就可以实现对转速的控制;通过改变给四线脉冲电流的顺序,则可实现对转向的控制。

所以,设计了如下电路图:C51程序代码为:代码一#include <AT89X51.h>static unsigned int count;static unsigned int endcount;void delay();void main(void){count = 0;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1ET0 = 1; //定时器0中断允许TH0 = 0xFC;TL0 = 0x18; //设定时每隔1ms中断一次TR0 = 1; //开始计数startrun:P1_3 = 0;P1_0 = 1;delay();P1_0 = 0;P1_1 = 1;delay();P1_1 = 0;P1_2 = 1;delay();P1_2 = 0;P1_3 = 1;delay();goto startrun;}//定时器0中断处理void timeint(void) interrupt 1{TH0=0xFC;TL0=0x18; //设定时每隔1ms中断一次count++;}void delay(){endcount=2;count=0;do{}while(count<endcount);}将上面的程序编译,用ISP下载线下载至单片机运行,步进电机便转动起来了,初步告捷!不过,上面的程序还只是实现了步进电机的初步控制,速度和方向的控制还不够灵活,另外,由于没有利用步进电机内线圈之间的“中间状态”,步进电机的步进角度为18度。

基于51单片机的无线充电智能控制设计

基于51单片机的无线充电智能控制设计作者:王正光黄飞周诗超付鹏宇宋诗雨来源:《中国科技博览》2013年第26期[摘要]设计无线充电电路系统,控制部分以单片机AT89S51为核心,设计蓝牙单片机接口,以手机/PC的蓝牙调试助手为人机交互界面,对无线充电开始或结束进行控制,并设计语音提示、液晶屏显示功能。

该设计系统具有可控制,无线充电,能量传输效果好,无需布线等优势,有着广泛的应用前景。

[关键字]AT89S51单片机蓝牙模块无线充电智能控制中图分类号:TN657.1 文献标识码:A 文章编号:1009-914X(2013)26-291-01引言现今的大部分非接触式传电仍然采用手动或是接触式控制,不能对无线充电设备进行有效实时控制。

因而实现可控制、高效率、大功率、长距离便成了今后关于无线充电的主要研究方向。

一、系统结构本设计由发射电路、接收电路、控制电路三部分组成。

无线充电系统主要采用电磁感应原理,通过线圈进行能量耦合实现能量的传递。

如图1所示,系统工作时输入端将交流电经桥式整流电路变换成直流电,当接收线圈与发射线圈靠近时,在接收线圈中产生感生电压,当接收线圈回路的谐振频率与发射频率相同时产生谐振,电压达最大值,具有最好的能量传输效果,次级线圈输出的电流经转换电路变化成直流电为电池充电。

本系统建立手机/PC端蓝牙和从机蓝牙模块的通信,通过蓝牙调试助手发送相应指令给下位机主机AT89C51单片机,单片机控制继电器开端实现充电与否,同时驱动喇叭和LCD提示充电开始与结束、充电时间等信息。

二、硬件设计1、发射端为了使得发射端和接受端两谐振体能在稳定设定的频率下产生谐振并传输功率,驱动源必须有频率可调和功率放大功能,且在高频下能有较好的输出波形。

在输入波形上,我们选用TTL波,因为其在相同的时间内携带的能量较三角波和正弦波都高。

信号源直接采用信号发生器,它能稳定产生可调的最高至3MHz的TTL波。

在功率放大电路中,我们选用IXDD409做为功率放大芯片。

单片机控制的人机接口

单片机控制的人机接口贺世云(阿城电站设备自动化设计研究所哈尔滨150303)摘 要:单片机现已成为电力系统保护中常用的硬件。

本文介绍以以Inte l 公司的16位单片机80C196K B 为核心的人机接口控制方案,并详细说明了其硬件原理及软件实现。

关键词:单片机;实时时钟;通讯接口;C M OS 技术0 引言随集成电路和计算机技术的飞速发展,计算机保护在电力系统中的应用和发展也是十分迅速的,它主要依靠计算机智能地实现保护功能和自动控制。

它的主要部分是计算机本体,用来分析电力系统的有关电量及判断系统是否发生故障,决定是否发出跳闸信号。

1 硬件原理以Inte l 公司新一代高速16位单片机80C196KB 为核心,它具有运算速度快、控制能力强运行安全可靠,而且内部设有监视定时器,能随时解脱软件故障造成的死机现象,为装置长期稳定运行提供了保证。

1 1 总体框图主要由时钟接口电路、键盘接口、液晶显示电路、与保护通讯接口、与上位机通讯接口及其打印机接口等组成,其原理框图如下图所示。

下面主要介绍时钟接口电路、与保护通讯接口、与上位机通讯接口及其打印机接口。

附图 人机对话通道接口原理框图1 2 实时时钟电路选用美国DALL AS 公司推出的DS12887实时时钟芯片。

采用C MOS 技术制成,把时钟芯片所需的晶振和外部锂电池相关电路集成于芯片内部,同时还与I B M AT 计算机常用MC146818B 和DS1287管脚兼容可直接替换。

时钟电路设计勿需任何外围电路并具有良好的微机接口。

它具有微功耗、外围接口简单、精度高、工作稳定可靠等优点。

内含锂电池,断电情况运行十年以上不丢失数据。

模式选择脚MOT 接地,选择I N TEL 时序;DS12887的数据总线及AS 地址选通输入端与80C196KB 单片机的数据总线及ALE 脚直接相连;而DS 、R /W 读写控制线与单片机的RD 、W R 控制线相连;片选信号CS 来自与地址译码器件34电 站 设 备 自 动 化 2007年3月 第1期GAL16V8;复位输出(RESET)取自微处理器监控芯片MAX705,当保持低电平时间大于20m s,保证DS12887有效复位。

MCS-51单片机第七章 人机交互通道配置及其接口技术


描完。
要注意的两个问题:
1.字型码通常通过查表指令MOVC来求得.
2.换位显示时通Be常ijin要g In加sti一tute段of程Pe序tro-使che所mi有cal的TecLhEnDol全ogy灭.
动态显示程序流程图
采用动态扫描方式依次循环点亮各位数码管,构成
多位动态数码管显示电路。
1
开始
指向段选口,送字型码
DJNZ R2,$
DJNZ R1,AGAIN ;2μs
NOP
;1μs
NOP
;1μs
NOP
;1μs
NOP
;1μs
NOP
;1μs
RET
;2μs
END
;2μs×48 ×10
Beijing Institute of Petro-chemical Technology
7.2.2 LED数码管及其应用
共阳极
共阴极
7.2.2 LED数码管及其应用
显示0~9程序
DELAY: MOV R7, #10

ORG 0000H
MAIN : MOV R0, #0
MOV R4, #10
;存要显示的数 ;存循环次数
DEL0: MOV R6, #200 DEL1: MOV R5, #250 DEL2: DJNZ R5, DEL2

WTAB: DB 3FH,06H,5BH

P1.0~1.7 MCS-51
aa
bf
b
g
he
c
dh
;指向字形码表首地址 ;取显示缓冲区中数据 ;查表显示译码 ;输出显示
;字形码表
COM
Beijing Institute of Petro-chemical Technology

基于51单片机的“扫地机器人”设计报告

第十二届智能控制设计大赛初级组之基于51单片机的“扫地机器人”设计报告目录一、设计要求 ........................................................................................ 错误!未定义书签。

1.基本要求:.......................................................................................... 错误!未定义书签。

2.拓展要求:.......................................................................................... 错误!未定义书签。

二、设计思路 ........................................................................................ 错误!未定义书签。

三、方案比较 (3)1、洞洞板的选择 (3)2、芯片的选择 (3)3、单片机键盘的选择 (3)4、LCD的选择...................................................................................... 错误!未定义书签。

5、电源的选择....................................................................................... 错误!未定义书签。

6、储存模块的选择 (4)7、时钟模块的选择 (4)8、最终选用方案 (4)四、一些模块的选择及底盘制作 ........................................................... 错误!未定义书签。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的人机接口电路设计一、功能描述键盘和显示是单片机应用系统中实现人机对话的一种基本形式,两种接口设计的好坏,直接影响到人机接口的友好程度。

在对一个系统进行操作时,往往离不开人与机器的对话,人机接口界面可以满足人与机器之间的交流。

可以通过按键将所需要信号与信息输入给系统,经过系统处理后,所期待的效果又可以通过屏幕来显示出来,这样就可以很好的达到人与机器的交流目的。

二、硬件电路图基于51单片机的人机接口电路如图1.1所示。

电路结构包括基本的复位电路、晶振电路、串口程序下载电路、键盘电路及屏幕显示电路。

图1.1 基于51单片机的人机接口电路设计显示电路键盘控制AT89C51图1 人机接口电路结构框图复位电路 晶振电路三、接口定义接口定义说明包括单片机的I/O 口的定义、中断的选择。

在键盘电路中引入了外部中断方式0,减少了CPU 的工作强度。

屏幕接口电路采用的是并行工作方式,51单片的的I/O 口较多,采用并行方式可以增大数据传输的速度,可以将信息实时显示。

具体接口定义如表1.1所示。

表1 A T89C51接口定义I/O 口 定义引脚号 引脚名 接口说明 备注 1~8 P1口 接矩阵键盘 10 RXD 接MAX232 11TXD 接MAX23212 /INT0 接74ls13四输入与非门输出引入中断21 P2.0 接屏幕的RST 22 P2.1 接屏幕的RS 23 P2.2 接屏幕的RW 24 P2.3 接屏幕的E32~38 P0口接屏幕的数据口DB0~DB7 中断类型 中断方式 按键中断中断方式0四、程序流程图1、主程序在主程序中,执行两个任务:1)初始化,键盘初始化,屏幕初始化;2)判断中断是否发生。

程序开始,进行初始化,若有中断发生,则屏幕有相应的显示;若无中断发生,则屏幕不显示或保留原显示,继续等待中断发生。

主程序流程图如图2.1所示。

2、初始化初始化函数主要包括键盘初始化和屏幕初始化。

键盘的初始化:1)设置中断标志位flag 初值为0,表示无中断产生,若有中断产生,则中断标志位flag 变为1;2)给P1口赋初值,若外部有键被按下,则P1口的值发生改变,引发外部中断;3)设置外部中开始 初始化中断发生?Y N屏幕显示 结束图2.1 主程序流程图断0的触发方式为下降沿触发,然后开启外部中断0,最后开启总中断。

屏幕初始化主要是对显示地址的初始化。

程序流程图分别如图2.2,2.3所示。

4、中断进入中断以后,中断标志位置1。

然后将外部中断0关闭,避免同时按下两个键时产生干扰;外部中断响应后开始进行键盘扫描;最后再给P1口重新赋初值,将之前关闭的外部中断打开,等待下一次的中断服务。

程序流程图如图2.4所示。

5、按键扫描按键扫描子函数实现的功能是判断哪一个按键被按下。

扫描开始后,通过行列检测的方式检测是否有按键被按下;确认按键被按下后,读取P1口的值,判断出哪个按键被按下,屏幕显示相应的内容。

程序流程图如图2.5所示。

6、屏幕写指令写指令函数程序流程图如图2.6所示。

该函数的功能是向控制器写入操作指令。

首先判断控制器的状态是的忙,如果忙则继续等待,不忙则进行下一步。

再将读写控制端读取键值 屏幕显示消抖重新检测扫描开始 扫描结束图2.5 按键扫描程序流程按键检测 按键按下? NYY键盘扫描 开外部中断 进入中断 退出中断图2.4 中断程序流程图关外部中断 flag=1 P1口赋初值中断标志位赋初值初始化开始中断配置 结束图2.2 按键初始化程序流程图图2.3 屏幕初始化流程图初始化开始 屏幕复位 写清屏指令 写开显示指令结束写基本指令集R/W 置0,使控制器为写的状态,再将RS 置低,然后向P0口送入指令数据,指令等待接收。

当使能端E 形成一个下降沿时,指令被接收。

控制器完成相应的指令动作 7、屏幕写数据写数据函数程序流程图如图7所示。

该函数的功能是向控制器写入显示数据。

首先判断控制器的状态是的忙,如果忙则继续等待,不忙则进行下一步。

再将读写控制端R/W 置0,使控制器为写的状态,再将RS 置高,然后向P0口送入数据,数据等待接收。

当使能端E 形成一个下降沿时,数据被接收,在屏幕上进行相应的显示。

五、程序1)主函数#include <reg51.h> #include<12864.h> #include<KEY .h> void main() { Lcm_init(); key_init(); while(flag==1) { Lcm_display(); } }图2.6 写指令流程图开始 测忙? RS=0 将指令送入P0口 将使能端置高E=1 将使能端置低E=0结束YN 读状态R/W=0 图2.7 写数据流程图开始 测忙? RS=1 将数据送入P0口 将使能端置高E=1 将使能端置低E=0结束YN读状态R/W=02)、12864.c#include<12864.h>uchar S1[]= "2012年7 月20 号";uchar S2[]= "文理学院";uchar S3[]= "第三实验楼";uchar S4[]= "1 楼112";/*****************延时函数*********************/ void delay_1ms(uint x){uint i,j;for(j=0;j<x;j++)for(i=0;i<110;i++);}/*****************写指令函数*********************/ void write_cmd(uchar cmd){RS=0;RW=0;E =0;P0=cmd;delay_1ms(5);E =1;delay_1ms(5);E =0;}/*****************写数据函数*********************/ void write_date(uchar date){RS=1;RW=0;E =0;P0=date;delay_1ms(5);E =1;delay_1ms(5);E =0;}/*****************显示位置函数*********************/ void Lcm_pos(uchar *ptr,uchar ddram){uchar i,j=0,x;if(ddram<0x88)Line=0; //定位行地址:第一行else if(ddram<0xA0)Line=2; //定位行地址:第三行else if(ddram<0xA8)Line=1; //定位行地址:第二行elseLine=3; //定位行地址:第四行Col=0x0f&ddram; //定位列地址if(Col>0x07)Col=Col-0x08;x=Col*2;write_cmd(ddram); // 定位显示起始地址while ((ptr[j])!='\0')j++; //判断数组ptr中字符的个数for (i=0;i<j;i++){write_date(ptr[i]); //输出单个字符x++;if (x==0x10){x=0;Line++;switch (Line){case 0:write_cmd(0x80);break;case 1:write_cmd(0xA0);break;case 2:write_cmd(0x88);break;case 3:write_cmd(0xA8);break;}if (Line>3){write_cmd(0x80);Line=0;}}}}/*****************初始化函数*******************/ void Lcm_init(){RST=0;delay_1ms(10);RST=1;delay_1ms(10);write_cmd(0x30);delay_1ms(10);write_cmd(0x0c);delay_1ms(10);write_cmd(0x01);delay_1ms(10);}/*****************显示函数*******************/ void Lcm_display(){Lcm_pos(S1,0X80);delay_1ms(10);Lcm_pos(S2,0X90);delay_1ms(10);Lcm_pos(S3,0X88);delay_1ms(10);Lcm_pos(S4,0X98);delay_1ms(10);}3)、12864.h#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar Col,Line;sbit E = P2^0;sbit RS = P2^1;sbit RW = P2^2;sbit RST= P2^3;void delay_1ms(uint x);void write_cmd(uchar cmd);void write_date(uchar date);void Lcm_pos(uchar *ptr,uchar ddram);void Lcm_init();void Lcm_display();4)、key.c#include <reg51.h>#include <KEY.h>/*****************延时函数*********************/ void delay_1ms(uint x){uint i,j;for(j=0;j<x;j++)for(i=0;i<110;i++);}/*****************初始化函数*******************/void key_init(){flag=0; //中断未发生,标志位初值设置为0;P1=0x0f; //给P1口赋初值,检测是否产生外部中断;TI=0; //数据允许发送标志位清0,允许数据发送;IT0=1; //外部中断0为下降沿触发;EX0=1; //开外部中断;EA=1; //开总中断;}/****************外部中断函数*****************/void jianpan() interrupt 0{flag=1; //中断产生,标志位置1;EX0=0; //关外部中断,避免干扰;keyscan(); //外部中断产生后,进行键盘扫描;P1=0x0f; //重新给P1口赋值;EX0=1; //重新打开外部中断0;}/*****************按键扫描函数*******************/void keyscan(){P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0) //消抖检测;{delay_1ms(10); temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0x7e: key=0; break;case 0xbe: key=1; break;case 0xde: key=2; break;case 0xee: key=3; break;}while(temp!=0xf0) //按键松手检测;{temp=P1;temp=temp&0xf0;}}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay_1ms(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0x7d: key=4; break;case 0xbd: key=5; break;case 0xdd: key=6; break;case 0xed: key=7; break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay_1ms(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0x7b: key=8; break;case 0xbb: key=9; break;case 0xdb: key=10; break;case 0xeb: key=11; break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay_1ms(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0x77: key=12; break;case 0xb7: key=13; break;case 0xd7: key=14; break;case 0xe7: key=15; break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}}5)、key.h#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar temp,flag;uint key;void key_init();void keyscan();void delay_1ms(uint x);。

相关文档
最新文档