MCU SOURCE FILE_键盘

发布者:梦中的额吉最新更新时间:2015-12-22 来源: eefocus关键字:MCU  SOURCE  FILE  键盘 手机看文章 扫描二维码
随时随地手机看文章
#include

#include

#define uchar unsigned char
#define uint unsigned int
#define cmd P0    //定义LCM的数据接口,请根据实际情况修改
#define lcmbusy P0_7   //定义LCM数据接口的第8位所在的端口,请根据实际情况修改
#define RS P3_4  //定义LCM的RS引脚所在的端口,请根据实际情况修改
#define RW P3_3   //定义LCM的RW引脚所在的端口,请根据实际情况修改
#define EN P3_2   //定义LCM的EN引脚所在的端口,请根据实际情况修改

#define c_cls 0x01   //清屏命令
#define c_curret 0x02   //光标返回命令
#define c_setmode1 0x06  //设置输入模式:字符码传送完成后DDRAM地址指针自动加1,显示不移位(一般使用此模式)
#define c_setmode2 0x07  //设置输入模式:字符码传送完成后DDRAM地址指针自动加1,显示向右移位
#define c_setmode3 0x04  //设置输入模式:字符码传送完成后DDRAM地址指针自动减1,显示不移位
#define c_setmode4 0x05  //设置输入模式:字符码传送完成后DDRAM地址指针自动减1,显示向左移位
#define c_displayoff 0x08 //关显示
#define c_displayon1 0x0c //开显示命令1,无光标
#define c_displayon2 0x0f //开显示命令2,有光标且光标闪烁
#define c_displayon3 0x0e //开显示命令3,有光标且光标不闪烁
#define c_displaymove1 0x10 //光标向左移动,AC 自动减1
#define c_displaymove2 0x14 //光标向右移动,AC 自动加1
#define c_displaymove3 0x18 //光标和显示一起向左移动
#define c_displaymove4 0x1c //光标和显示一起向右移动
#define c_setfunc1 0x30  //LCM功能设置:8位数据总线,单行显示,5X8点阵字体
#define c_setfunc2 0x34  //LCM功能设置:8位数据总线,单行显示,5X10点阵字体
#define c_setfunc3 0x38  //LCM功能设置:8位数据总线,双行显示,5X8点阵字体
#define c_setfunc4 0x20  //LCM功能设置:4位数据总线,单行显示,5X8点阵字体
#define c_setfunc5 0x24  //LCM功能设置:4位数据总线,单行显示,5X10点阵字体
#define c_setfunc6 0x28  //LCM功能设置:4位数据总线,双行显示,5X8点阵字体

#define BL P3_5  //定义LCM背光控制接口
uchar code hexcode[16]="0123456789ABCDEF";



void cmdexec(uchar scmd)
{
cmd=0xff;
RS=0;
RW=1;
_nop_();
EN=1;
_nop_();
_nop_();
while(lcmbusy);
EN=0;
RS=0;
RW=0;
cmd=scmd;
_nop_();
EN=1;
_nop_();
_nop_();
EN=0;
}

void show(uchar x,uchar y,uchar schar){ 
uchar temp;
temp=x&0x0f;
y&=0x3;
if(y==2)temp|=0x40;
temp|=0x80;
cmd=0xff;
RS=0;
RW=1;
_nop_();
EN=1;
_nop_();
_nop_();
while(lcmbusy);
EN=0;
RS=0;
RW=0;
cmd=temp;
_nop_();
EN=1;
_nop_();
_nop_();
EN=0;
RS=0;
RW=1;
_nop_();
EN=1;
_nop_();
_nop_();
while(lcmbusy);
EN=0;
RS=1;
RW=0;
cmd=schar;
_nop_();
EN=1;
_nop_();
_nop_();
EN=0;
}

void showstr(char x,y,char *string)
while(*string!='')
 show(x,y,*string);
  string++;
  x++;
 }
}


void initlcm(void)
cmd=0x00;
 cmdexec(c_setfunc3);  //设置LCM为8位数据总线,5x8点阵双行显示
 cmdexec(c_cls);   //清屏 
 cmdexec(c_setmode1);  //设置LCM显示模式设置1
 cmdexec(c_displayon1);  //开启显示,无光标
}

uchar keyscan(void)  //键盘扫描过程实际上是先将键盘接口的所有行(列)线都输出0,列(行)线输出1,读取列(行)线的值
uchar data k;  //然后将所有列(行)线都输出0,行(列)线输出1,读取行(列)线的值,
 P2=0xf0;   //然后将得到的列线和行线值相加作为键值
 k=P2;
 P2=0x0f;
 k=k+P2;
 return ~k;
}

void delayms(unsigned int ms)//延时函数
unsigned char data i;
 while(ms--)
 for(i=0;i<123;i++);
 }
}

void main(void)
uchar data key;
 BL=0;  //开LCM背光
 initlcm();
 showstr(0,1," Welcom to PES  ");
 showstr(0,2,"Xian zai jian:");
 while(1)
 key=keyscan(); //调用键盘扫描子程序,得到当前键值
  show(14,2,hexcode[key>>4]);//将得到的键值以十六进制形式显示在液晶显示屏上
  show(15,2,hexcode[key&0x0f]);//将得到的键值以十六进制形式显示在液晶显示屏上
 
 }
}

关键字:MCU  SOURCE  FILE  键盘 引用地址:MCU SOURCE FILE_键盘

上一篇:XMEGA128学习笔记11-定时器TC
下一篇:MCU SOURCE FILE_数码管

推荐阅读最新更新时间:2024-03-16 14:41

单片机设计的DS18820温度报警器
1、本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字化、智能化方面有广泛的用途。温度显示基本范围0.00℃—99.99℃。精度误差小于0.01℃。所测温度值由四位数码管显示。可以设定温度的上下限报警功能。 2、本设计主要是介绍了单片机控制下的温度报警系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下: 单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时
[单片机]
<font color='red'>单片机</font>设计的DS18820温度报警器
瑞萨电子计划到2023年前将车载MCU产能提高5成以上
日前,瑞萨电子在经营说明会上表示,计划到2023年前将车载MCU产能提高5成以上(较2021年)。同时,瑞萨电子将提高设备投资金额,预计到2021年将超过800亿日元,到2022年将在600亿日元左右,该公司目前的设备投资金额约200亿日元。 瑞萨电子计划从2021年开始将车用MCU的产能提高50%,若以8英寸晶圆换算高端MCU产量,每月产能将扩大1.5倍至约4万片,这部分产能主要依赖晶圆代工厂产线来进行;而低端MCU产量方面,计划每月提高至3万片,较现行增加70%,这部分产能主要将通过提高瑞萨自有工厂产能来满足。 汽车缺芯问题仍将持续存在,自6月底以来,瑞萨面向汽车的积压订单增长约30%,9月初,该公司表示未来3年将大胆
[汽车电子]
基于单片机MC9S12XS128的汽车BCM的设计
  Freescale的S12系列16位MCU在车身控制系统中应用广泛,用于车身控制器BCM、门锁模块、RKE接收器、智能执行器、灯光模块等车身ECU中。在某整车厂开发的BCM中,采用MC9S12XS128做为中央处理器,实现了车身控制的大部分功能,包括门锁控制、灯光控制、雨刷控制、车窗控制和防盗报警,还实现了CAN/LIN网关功能,通过CAN总线接收车速和碰撞信号,从而实现安全驾驶和紧急操作,通过LIN总线接收来自雨量传感器的信号,控制雨刷的快速、慢速或间歇操作。下面从硬件设计和软件设计中的关键技术方面介绍MC9S12XS128在BCM中的应用。   1 硬件设计   1.1 MC9S12XS128简介   MC9S12X
[单片机]
基于<font color='red'>单片机</font>MC9S12XS128的汽车BCM的设计
基于MCU+FPGA的航空总线接口板测试平台设计
引言 本文的项目背景是为了测试在航空领域CAN总线和高速异步总线的通信状况。CAN(控制器局域网)总线是由ISO(国际标准化组织)定义的有效支持分布式控制和实时控制的多组串行通信总线,由于其在通信能力、实时性、灵活性、易用性、传输距离远、可靠性等方面有着明显的优势,日益受到人们的重视,在航空等领域已得到广泛应用,成为目前比较流行的现场总线之一。RS485标准的全称为TIA/EIA-485串行通讯标准,为弥补RS-232通信距离短、速率低等缺点而产生的,其数据采用平衡发送和差分接收,具有抑制共模干扰的能力,抗噪声干扰性好。RS485具有多站能力(在总线上允许连接多达128个收发器),是一种相对经济、具有相当高噪声抑制、相对高的
[嵌入式]
采用查询和中断方式利用单片机定时器T0产生定时脉冲编程
利用定时器T0产生定时脉冲。每隔2ms产生宽度为2个机器周期的正脉冲,由P1.0输出此定时序列脉冲信号(设时钟频率为6MHZ)。 答:首先求出定时器T0初值。由于时钟频率为6MHZ,所以,机器周期为2µs。 因为:t=(213-T0初值)´ 机器周期 所以,当t=2ms时,则:(213-T0初值)´ 2´10-6=2´10-3 解得:T0初值=7096=11011101 11000B,其中将高8位11011101 B=DDH赋给TH0,低5位11000B=18H赋给TL0。 方法一: 采用查询工作方式, 编程 如下: ORG 0000H AJMP MAIN
[单片机]
51单片机查表指令的用法
51单片机具有两条查表指令,用于从 ROM 中读出预存的数据: MOVC A, @A + PC MOVC A, @A + DPTR 其中前一条指令的用法,比较难,使用的时候,需要计算一个“偏移量”。不了解“指令的字节数”的人,都不清楚应该如何计算。 最佳答案: 51单片机汇编语言有一条查表指令是: MOVC A, @A + DPTR 它不是单独使用的,要和 DB 伪指令配套使用。 例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。 程序如下: ;------------------------------------- MOV DPTR, #1000H MOVC
[单片机]
单片机的时钟中断应用
本文以6MHz时钟的单片机AT89C51系统为例,说明时钟中断的应用: 定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,2
[单片机]
基于单片机STC89C52RC的汽车中网扫描灯设计
  生活水平的不断提高使汽车逐步走进了千家万户。追求时尚个性的心理使车主们费尽心思装扮自己的爱车。汽车LED中网扫描灯既彰显个性,又可以起到警示作用,甚至还有一个好听的名字叫游侠灯。本文介绍一款汽车中网扫描灯的设计制作方法。它主要采用了常见的STC89C52RC单片机作为主控制器,采用光电耦合器进行信号转换,用市场上采购的食人鱼LED灯条改装成八组LED扫描灯。能够产生拖尾和呼吸等效果,还可以进行底盘灯和无线遥控等功能的扩展。   0 引言   LED产业的迅猛发展给照明和装饰都带来了不小的冲击,特别是LED与汽车的结合更是当前的热门话题。汽车中的阅读灯、示宽灯、刹车灯,甚至照明大灯都渐渐出现了LED的身影。当然作为装饰用的仪
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved