独立式查询键盘的设计程序

独立式查询键盘的设计程序
独立式查询键盘的设计程序

【程序】独立式查询键盘的设计

文章来源:互联网作者:未知访问次数:6

--------------------------------------------------------------------------------

文章导读:本程序为独立式查询键盘的设计

//-----------------------函数声明,变量定义-------------------------------------------------------- #include

sbit KEY_1 =P1^4; // 将p1.4定义为KEY_1

sbit KEY_2 =P1^5; // 将p1.5定义为KEY_2

sbit KEY_3 =P1^6; // 将p1.6定义为KEY_3

sbit KEY_4 =P1^7; // 将p1.7定义为KEY_4

#define KEY P1

unsigned char COUNT_TI=0; //中断计数

unsigned char KEY_value=0; //键值

//-----------------------变量声明--------------------------------------------------------------------- void system_init(void ); //设定INT0的工作方式

void key_manage(void); //检测到一次有效按键,键值散转

void manage_key1(void); //按键1处理程序

void manage_key2(void); //按键2处理程序

void manage_key3(void); //按键3处理程序

void manage_key4(void); //按键4处理程序

void TIMER0_intrupt(); //定时器0中断处理程序

//-------------------------------- ------------------------------------------------------------------

//--------------------------------------------------------------------------------------------------

// 函数名称:system_init()

// 函数功能:初始化设置

// 设定INT0的工作方式

//--------------------------------------------------------------------------------------------------

void system_init(void )

{

TMOD=0x20; //定时器0工作在方式2的定时模式

ET0=1; //定时器0中断允许

TH0=0;

TL0=0;

TR0=1; //定时器0开始计数

EA=1; //系统中断允许

}

//--------------------------------------------------------------------------------------------------

// 函数名称:TIMER0_intrupt

// 函数功能:定时器0中断处理程序

//--------------------------------------------------------------------------------------------------

void TIMER0_intrupt() interrupt 1 using 1

{

EA=0; //系统中断禁止

if((++COUNT_TI)%30==0)

{

switch(COUNT_TI/30)

{

case 1:if(KEY&0xF0!=0)

KEY_value=KEY&0xF0;

else COUNT_TI=0;

break;

case 2:break;

case 3:if((KEY&KEY_value)==0)

COUNT_TI=0;

break;

default:if((KEY&KEY_value)==0)

key_manage();

}

}

EA=1;

}

//--------------------------------------------------------------------------------------------------

// 函数名称:KEY_manage

// 函数功能:键值散转

//--------------------------------------------------------------------------------------------------

void KEY_manage(void)

{

switch(KEY_value) //按键散转

{ //在这里可以定义组合键

case 0x10: manage_key1

();break;

case 0x20: manage_key2();break;

case 0x40: manage_key3();break;

case 0x80: manage_key4();break;

// default:

}

}

//--------------------------------------------------------------------------------------------------

// 函数名称:manage_key1

// 函数功能:按键1处理程序

//--------------------------------------------------------------------------------------------------

void manage_key1(void)

本文来自: 高校自动化网(https://www.360docs.net/doc/f68029704.html,) 详细出处参考(转载请保留本链接):

https://www.360docs.net/doc/f68029704.html,/html/MCS51/6446_2.html

独立式按键和一位数码显示

独立式按键和一位数码显示 一.实训目的: 1.练习按键编程 2.练习数码显示编程 二.实训任务: (可以根据实际条件改做类似按键和显示的实验) 1. 8个按键,分别对应一个子程序,按1号键,执行第一个子程序,按2号键执行第二个子程序,依此类推。 2.每个子程序功能是,在一位数码管上显示键号。 三.实训准备: 1.分析电路,准备材料,按图连接电路 2.分析任务,编写程序,并仿真调试 3.要求用散转指令实现多分支 参考仿真文件:按键数码.DSN 参考电路: 技能训练9-2参考电路图 说明:此图省略了单片机的复位和晶振电路,试验时必须要加上。 四.参考程序: M1: LCALL ANJIAN MOV A,R7 JZ M1 MOV 20H,A RL A ADD A,20H MOV DPTR,#TAB1 JMP @A+DPTR TAB1: LJMP PRG0

LJMP PRG1 LJMP PRG2 LJMP PRG3 LJMP PRG4 LJMP PRG5 LJMP PRG6 LJMP PRG7 LJMP PRG8 LJMP M1 PRG0: LJMP M1 PRG1: LCALL DISP LJMP M1 PRG2: LCALL DISP LJMP M1 PRG3: LCALL DISP LJMP M1 PRG4: LCALL DISP LJMP M1 PRG5: LCALL DISP LJMP M1 PRG6: LCALL DISP LJMP M1 PRG7: LCALL DISP LJMP M1 PRG8: LCALL DISP LJMP M1 ORG 0080H ANJIAN: MOV R7,#0 MOV A,P2 CPL A JZ ANJIANE MOV R6,#8 ANJIANL:CLR C RRC A INC R7 JC ANJIANE DJNZ R6,ANJIANL ANJIANE:RET

嵌入式Linux应用程序设计试题

嵌入式Linux应用程序设计(试题) 1、嵌入式linux操作系统的特点(多选) ABCDE A、低廉性 B、广泛性 C、可移植性好 D、良好的网络支持 E、实时性好 2、Linux的基本思想有两点:A、一切都是文件;B、每个软件都有确定的用途。 3、嵌入式Linux系统构成:嵌入式微处理器,外围硬件设备,嵌入式操作系统,用户应用程序。 4、硬盘分区一般分为:主分区,扩展分区,逻辑分区,交换分区 5、主分区和扩展分区的最大的区别:C A、大小不一样 B、挂载点不一样 C、主分区的作用就是用来进行启动操作系统的,因此引导程序都应该存放在主分区上。 D、主分区在硬盘物理位置的最前面 6、Linux分区类型默认的是:C A. vfat B. ext2/ext3 C. swap D. dos 7、如何从当前系统中卸载一个已装载的文件系统 A A. umount [挂载点目录] B. dismount C. mount –u [挂载点目录] D. 从 /etc/fstab 中删除这个文件系统项 8、用户切换指令是: A A、su B、sudo C、useradd D、userdel 9、查看当前系统中的进程指令 A A、ps B、kill C、cat D、man 10、下面杀死一个ID号为9号的进程的操作正确的是 C A、ps -ef B、kill 9 C、kill -9 9 D、rm 9 11、使用重定向来把ls输出保存到文件test.txt中:A A、ls > test.txt B、ls < test.txt C、ls | test.txt D、ls | grep test.txt 12、使用重定向来把test.txt文件中内容输出:B A、more > test.txt B、more < test.txt C、more | test.txt D、more | grep test.txt 13、解压文件tar.tar.gz:C A、tar -zxvf tar.tar.gz B、tar -jxvf tar.tar.gz C、tar -cxvf tar.tar.gz D、tar -jvf tar.tar.gz 14、把目录/aaa内文件及目录的压缩到文件tar.tar.gz:D A、tar -zxvf tar.tar.gz /aaa B、tar -jxvf tar.tar.gz /aaa C、tar -cxvf tar.tar.gz /aaa D、tar -cvf tar.tar.gz /aaa 15、vi 有几种模式:三种模式 16、vi中的操作指令: :w 保存 :q 退出 :q! 强行退出 :wq 保存退出 :w [filename] 保存到filename文件中 :set nu 显示行号,设定之后,会在每一行的前面显示对应行号

独立按键控制数码管

青岛农业大学海都学院 单片机课程设计实习报告 院系工程系 专业 2014级电气Z1班 学号 201471019 姓名隋永博 实习时间第11周 实习课程单片机应用课程设计 2015年11月6日

按键控制数码管加减显示 目录 一、前言 (3) 二、设计要求 (3) 三、系统硬件设计与说明 (4) 3.1系统组成及总体框图 (4) 3.2 AT89C51 (4) 四、系统软件设计与说明 (5) 4.1 软件部分的程序流程图 (5) 4.2 源程序 (5) 五、仿真过程描述 (7) 六、总结 (8)

一、前言 随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。 基于当前市场上的智能数字市场需求量大,其中数码管显示技术就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。以液晶显示技术的发展为背景,选择了比较常用的T6963C内置控制器型图形LCD(液晶显示嚣)模块,从应用角度介绍了该控制器的特点和基本功能,并描述了单片机控制T6963CLCD模块的显示机理。在此前提下以C51硬件开发语言为基础,给出了8051单片机与T6963C 的接口电路框图,并以字符、图形的具体显示方法为例简要介绍了软件的设计流程及实现。 二、设计要求 名称:K1-K4控制数码管移位显示 说明:按下K1时加1计数并增加显示位, 按下K2时减1计数并减少显示位, 按下K3时清零。

三、系统硬件设计与说明 3.1系统组成及总体框图 图1 系统硬件总图 3.2 AT89C51 该课程设计中我们选用的芯片是AT89C51。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash

(整理)独立式键盘控制灯移动.

课程设计说明书 课程名称:单片机原理及应用 设计题目:独立式键盘控制灯移动 院系:电子信息与电气工程系 学生姓名: 学号: 专业班级: 指导教师:

课程设计任务书

独立式键盘控制灯移动设计 摘要:单片机具有人机对话功能,开关、键盘是实现人机对话的主要输入设备,也是最常用的设备,通过它能发出各种控制命令和数据到单片机。本课题即针对拨动开关作为输入信号控制输出端拟定。该设计以8位AT89C52单片机为核心,以12MHZ晶振和电容构成外部时钟电路,用电容、电阻和开关组成复位电路,桥堆2W10和7805、电容组成电源电路为整个电路供电,桥堆2W10和7805、电容组成电源电路为整个电路供电,四个按键开关K1、K2、K3、K4分别与单片机P2.4、P2.5、P2.6、P2.7相连,组成独立式键盘接口输入电路;P1端口接8只发光二极管,用作输出演示。 关键词:AT89C52 共阳极二极管 7805 桥堆2W10

目录 1设计背景 (1) 1.1课题的提出…………………………………………………………‥1 1.2单片机的发展现状 (1) 2设计方案 (2) 2.1硬件部分设计方案 (2) 2.2软件部分设计方案 (2) 3方案实施 (2) 3.1硬件部分实施方案 (2) 3.2软件部分实施方案 (6) 4结果与结论 (8) 4.1结果 (8) 4.2结论 (8) 5收获与感谢 (8) 6参考文献 (8) 7附录 (9) 附录一仿真图 (9) 附录二元器件清单 (10) 附录三源程序 (11)

1.1课题的提出 随着单片机的运算速度和处理能力的不断提高,其在各个领域得到更广泛的应用。然而随着其应用领域的不断扩大及集成化的不断提高,单片机的发展与应用越来越智能化。单片机的智能化水平不断提高能够满足人们更多方面的需求。这里以AT89C52系列为例介绍一种人机对话功能,本课题针对独立式键盘的应用而拟定。四个按键开关分别与单片机相连,组成独立式键盘接口电路,8只发光二极管用作输出演示。 1.2单片机的发展现状 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。由于单片机有许多优点,因此其应用领域之广,几乎到了无孔不入的地步。单片机应用的主要领域有:1、智能化家用电器2、智能化家用电器3、商业营销设备4、工业自动化控制5、智能化仪表6、智能化通信产品7、汽车电子产品。 单片机应用的意义不仅在于它的广阔范围及所带来的经济效益。更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的广,微控制技术将不断发展完善。

独立按键控制LED灯

项目五独立按键控制LED灯 1.掌握独立按键消抖原理 2.掌握独立按键接口电路设计 1.设计独立按键控制LED的硬件电路 2.编写程序分别实现按下按键1和按键2,LED灯闪烁方式不同 3.下载程序到单片机中,运行程序观察结果并进行软硬件的联合调试 键盘是常见的计算机输入设备,在单片机应用中,按键可以设置电子钟的时间;简易计算器中,按键可以输入数字;按键还可以实现单片机中两个不同功能程序切换。本项目要求两个按键分别实现LDE灯的不同闪烁方式,按键1按下时,8个LED灯从右向左依次点亮,按键2按下时,8个LED灯从左向右依次点亮。 本项目只需2个按键实现LED灯闪烁方式控制,因此按键接口电路设计成独立按键。独立按键即每个按键直接与单片机I/O端口连接,当按键按下和弹开时,单片机I/O端口呈现不同的电平。独立按键接口电路可以设计成当按键按下时,单片机I/O端口为高电平或者低电平,读者可以根据自己的需求自行设计。单片机应用中的独立按键多是机械弹性开关,在按键按下和弹开时,由于按键的机械特性,有抖动产生。消除抖动有硬件方式和软件方式,软件方式就是编程读取I/O端口电平时,产生一个5ms~10ms延时后,再次读取I/O端口电平,以确认按键是否按下或弹开。

1.独立按键与矩阵按键 键盘是实现人机交互的重要计算机输入设备,其中按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。按键按照接口原理可分为编码键盘和非编码键盘,编码键盘是用硬件来实现对键的识别,非编码键盘由软件来实现按键的识别。非编码键盘按连接方式可分为独立按键和矩阵按键。 独立按键特点是每个按键占用一条I/O线,当按键数量较多时,I/O口利用率不高,但程序编制简单,适合所需按键较少的场合。矩阵按键特点是电路连接复杂,软件编程较复杂,但I/O口利用率高,适合需要大量按键的场合。下图为常见独立按键和矩阵按键接口电路。 图独立按键接口电路与矩阵按键接口电路上图四个按键(常开触点开关)S1,S2,S3,S4分别与单片机的四个I/O端口连接。当按键没有按下时,四个I/O端口的电压为高电平;当按键按下

独立按键控制LED灯

项目五独立按键控制LED灯 1. 掌握独立按键消抖原理 2. 掌握独立按键接口电路设计 3. 掌握独立按键控制LED灯的程序编写 於Q项目任务 1. 设计独立按键控制LED的硬件电路 2. 编写程序分别实现按下按键1和按键2,LED灯闪烁方式不同 3. 下载程序到单片机中,运行程序观察结果并进行软硬件的联合调试 键盘是常见的计算机输入设备,在单片机应用中,按键可以设置电子钟的时间;简易计算器中,按键可以输入数字;按键还可以实现单片机中两个不同功能程序切换。本项目要求两个按键分别实现LDE灯的不同闪烁方式,按键1按下时,8个LED灯从右向左依次点亮,按键2按下时,8个LED灯从左向右依次点亮。 卜项目分析 本项目只需2个按键实现LED灯闪烁方式控制,因此按键接口电路设计成独立按键。 独立按键即每个按键直接与单片机I/O端口连接,当按键按下和弹开时,单片机I/O端口呈 现不同的电平。独立按键接口电路可以设计成当按键按下时,单片机I/O端口为高电平或者 低电平,读者可以根据自己的需求自行设计。单片机应用中的独立按键多是机械弹性开关,在按键按下和弹开时,由于按键的机械特性,有抖动产生。消除抖动有硬件方式和软件方式,软件方式就是编程读取I/O端口电平时,产生一个5ms?10ms延时后,再次读取I/O端口 电平,以确认按键是否按下或弹开。

1. 独立按键与矩阵按键 键盘是实现人机交互的重要计算机输入设备,其中按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。按键按照接口原理可分为编码键盘和非编码键盘,编码键盘是用硬件来实现对键的识别,非编码键盘由软件来实现按键的识别。非编码键盘按连接方式可分为独立按键和矩阵按键。 独立按键特点是每个按键占用一条I/O线,当按键数量较多时,I/O 口利用率不高,但程序编制简单,适合所需按键较少的场合。矩阵按键特点是电路连接复杂,软件编程较复杂,但I/O 口利用率高,适合需要大量按键的场合。下图为常见独立按键和矩阵按键接口电路。 图独立按键接口电路与矩阵按键接口电路 上图四个按键(常开触点开关)S1,S2, S3, S4分别与单片机的四个I/O 端口连接。当按键没有按下时,四个I/O端口的电压为高电平;当按键按下时,电

51单片机独立按键程序查询法和外部中断两种

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推 //1111111111111111111111111111111111111111111111111111111111111111111 //1111111111111111111111111111111111111111111111111111111111111111111 /****************************************************************************** * * 实验名: 左右流水灯实验 * 使用的IO : LED使用P2,键盘使用P3.1 * 实验效果: 按下K1键, * 注意: ******************************************************************************* / #include #include #define GPIO_LED P2 sbit K1=P3^1; void Delay10ms( ); //延时10ms /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main(void) { unsigned int i,j; j=0xfe; //1111_1110 while(1) { GPIO_LED=j; if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) {

任务3.3 独立按键的实现

任务3.3 独立按键 3.3.1 任务介绍 在数字钟中有四个独立按键,功能分别是调整、加、减、确定,用以调整系统的时间。在单片机系统中,键盘是基本和常用的接口,它是构成人机对话通话的一种常用方式,实现向单片机系统输入数据、传送命令等功能,是人工干预、设置和控制系统运行的主要手段。 本节的任务要求: 利用开发板上的四个按键,配合任务3.2数码管显示程序,实现数字钟的调时,为了简化程序,用3个LED的亮灭来代替对应数码管的闪烁(数码管的闪烁在这里有些难)。正常走时,3个LED都不点亮,当按下“调整”键时,“小时”对应的LED点亮,再次按下“调整”键,则“分”对应的LED点亮,然后再按下“调整”键,则“秒”对应的LED点亮,依次循环,直到按下“确定”键,三个LED返回到不点亮的状态。当按下“调整”键后,按下“加”或者“键”按键,则对应的数码管的显示值每次加1或者减1。 3.3.2 知识准备 1、轻触按键的认识 键盘分为编程键盘和非编程键盘。键盘上闭合键的识别由专用的硬件编码器来实现的为编程键盘,如计算机键盘;闭合键的识别由软件来实现的为非编程键盘,轻触按键属于非编程键盘。轻触按键具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统中。图3.3.1所示的是市面常见的轻触按键,从封装来区分,有贴片的,也有直插的;从引脚的数量来区分,有2个引脚的,也有4个引脚的。开发板上使用的按键时4引脚直插按键,尺寸为6×6×5,如图3.3.2所示。 图3.3.3 各种形状的按键图3.3.2 开发板使用的按键

2、按键的硬件电路和识别方法 图3.3.3是轻触按键的内部结构图,按键的4个引脚两两连通(可以用万用表测量),不连通的引脚,当按键被按下时,在金属弹片和反作用弹簧的作用下也会连通,当按键释放后,弹簧不起作用,引脚不连通。 图3.3.3 轻触按键内部结构图3.3.4 轻触按键的接口电路 图3.3.4是轻触按键的单片机接口电路,按键一端接地,另外一端接I/O口,同时通过上拉电阻接电源(上拉电阻大小5K~10K)。简单分析一下按键检测的原理:当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平); 当按键按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平) 。这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。结论:我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。 3、检测按键按下 按键的检测原理看起来比较简单,我们按照上述的原理先试着写一段任务中的程序看看运行效果怎么样。程序实现的内容为:百位数内的计数器,,按键每按下一次,计数器加1,将计数器的值显示在开发板的两位数码管上。程序如下: #incldue #define uchar unsigned char #define uint unsigned int sbit KeyInput=P1^0; //按键接口 //段码 uchar code Seg7Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code Seg7Posit[]={0xfe,0xfd}; //位码 uchar DispBuffer[2]; //缓冲区

单片机两个独立按键编程

按键1八个灯闪烁,按键2蜂鸣器响 ORG 0000H KEY: CLR P1.0 CLR P1.1 CLR P0.4 ;蜂鸣器不响 CLR P1.2 ORL P3, #0FH ;置P3.0~P3.3为输入状态 MOV A,P3 ; 读键值,键闭合相应位为0 CPL A ;取反,键闭合相应位为1 ANL A, #00001111B ;屏蔽高4位,保留有键值信息的低4位 JZ KEY ;全0,无键闭合,返回 LCALL DEL10S ;非全0,有键闭合,延时10 ms,软件去抖动 MOV A, P3 ;重读键值,键闭合相应位为0 CPL A ;取反,键闭合相应位为1 ANL A, #00001111B ;屏蔽高5位,保留有键值信息的低3位 JZ KEY ;全0,无键闭合,返回;非全0,确认有键闭合 JB Acc.0, KA0 ; 转0#键功能程序 JB Acc.1, KA1 ;转1#键功能程序 SJMP KEY KA0: SETB P1.0 MOV A,#0FCH; K0: MOV P0, A RL A LCALL DEL20S SJMP K0 KA1: SETB P1.2 K1: SETB P0.4 LCALL DEL20S CLR P0.4 SJMP K1 DEL10S: MOV R7 ,#40H DEL21: MOV R6, #0FFH DJNZ R6 ,$ DJNZ R7,DEL21 RET DEL20S: MOV R5,#100; 100×40×250=1s D10: MOV R6,#40 D20: MOV R7,#250 DJNZ R7,$ DJNZ R6,D20

独立按键控制数码管

/*独立键盘控制数码管*/ #include //#include "intrins.h" sbit P34=P3^4; // LCDEN sbit P35=P3^5; // RS sbit P36=P3^6; //WR sbit P37=P3^7; //RD sbit dula=P2^6; //段选 sbit wela=P2^7; //位选 #define uint unsigned int #define uchar unsigned char uchar display_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x00}; //0、1、2、3、4、关闭数码管段选uchar display_data[]={0x3d,0x3b,0x37,0x2f,0x1f,0xff}; //第1、2、3、4位数码管、关闭位选 void delay(uint k) //延时程序 { uchar i,j; for(j=k;j>0;j--) for(i=250;i>0;i--); } void display(uchar i) //显示函数程序 { uchar j; for(j=0;j<5;j++) { P0=display_data[i]; /*位值送入位寄存器*/ wela=1; // _nop_(); // _nop_(); wela=0; P0=display_code[i]; /*段值送入段寄存器*/

dula=1; // _nop_(); // _nop_(); dula=0; delay(1); } } void main() { while(1) { P2=0x00; if(P34==0) //按键LCDEN按下 { delay(20); if(P34==0) { display(1); //在第四位显示1 while(P34==0) ; } } if(P35==0) //按键LCDEN按下 { delay(20); if(P35==0) { display(2); //在第三位显示2 while(P35==0) ; } }

单片机独立按键和矩阵按键

单片机按键(独立按键和矩阵按键) 独立按键 常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图8-6 所示。 图8-6 独立式按键原理图 4 条输入线接到单片机的IO 口上,当按键K1 按下时,+5V 通过电阻R1 然后再通过按键K1 最终进入GND 形成一条通路,那么这条线路的全部电压都加到了R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V 就应该是等电位,是一个高电平。我们就可以通过KeyIn1 这个IO 口的高低电平来判断是否有按键按下。 这个电路中按键的原理我们清楚了,但是实际上单片机IO 口内部,也有一个上拉电阻的存在。我们的按键是接到了P2 口上,P2 口上电默认是准双向IO 口,我们来简单了解一下这个准双向IO 口的电路,如图8-7 所示。

图8-7 准双向IO 口结构图 首先说明一点,就是我们现在绝大多数单片机的IO 口都是使用MOS 管而非三极管,但用在这里的MOS 管其原理和三极管是一样的,因此在这里我用三极管替代它来进行原理讲解,把前面讲过的三极管的知识搬过来,一切都是适用的,有助于理解。 图8-7 方框内的电路都是指单片机内部部分,方框外的就是我们外接的上拉电阻和按键。这个地方大家要注意一下,就是当我们要读取外部按键信号的时候,单片机必须先给该引脚写“1”,也就是高电平,这样我们才能正确读取到外部按键信号,我们来分析一下缘由。 当内部输出是高电平,经过一个反向器变成低电平,NPN 三极管不会导通,那么单片机IO 口从内部来看,由于上拉电阻R 的存在,所以是一个高电平。当外部没有按键按下将电平拉低的话,VCC 也是+5V,它们之间虽然有2 个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态了。 当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么

利用RTLinux开发嵌入式应用程序

利用RTLinux开发嵌入式应用程序 对于中国工程师来说,利用实时Linux开发嵌入式应用程序是他们面临的困难之一,本文以RTLinux为例,并结合最为业界关注的是RTAI进行讨论,尽管这两种实现方式在句法细节上存在差异,但工作方式基本一样,因此所讲述的内容对两者都适用。 在实时任务与用户进程相互通信的过程中,有些实时应用程序无需任何用户界面即可在后台平静地运行,然而,越来越多的实时应用程序确实需要一个用户界面及其它系统功能,如文件操作或联网等,所有这些功能都必须在用户空间内运行。问题是,用户空间操作是非确定性的,而且与实时操作不兼容。 幸运的是实时Linux具有一种可在时间上减弱实时与非实时操作的机制,这种机制表现为一种称为实时FIFO的驱动程序。当insmod将rtl_fifo.o驱动程序插入Linux内核时,该驱动程序将自己注册为RTLinux的一部分,并成为Linux驱动程序。一旦插入Linux内核,用户空间进程和实时任务都可使用实时Linux FIFO。 在深入探讨实时FIFO的细节之前,还要回顾一下实时应用程序结构的某些部分(图1)。有效的嵌入式应用程序设计方法是将实时部分与固有的非实时功能分离开来(表1)。如果应用程序的任一部分,如用户界面、图形、数据库或网络仅需软实时性能,最好是将该部分写入用户空间。然后,仅将必须满足时序要求的那部分写成实时任务。 注意,RTLinux(PSC,便携式信号编码)和RTAI(LXRT,Linux实时扩展)的最新版本已采用了一种可在用户空间执行软和硬实时任务的方法。 任何硬实时任务都是在RTLinux的控制下运行的,该任务一般可执行周期性任务、处理中断并与I/O设备驱动程序通信,以采集或输出模拟和数字信息。当实时任务需要告诉用户进程有一个事件将发生时,它便将这一消息送给实时FIFO。每一个FIFO都是在一个方向上传送数据:从实时任务到用户空间,或反之。因此,双向通信需要使用两个FIFO。任何读出或写入实时任务一侧的操作都是非模块操作,因此rtf_put()和rtf_get()都立即返回,而不管FIFO状态是什么。 从应用程序一侧来看,FIFO就像一个常规文件。缺省情况下,RTLinux安装程序将在/dev 目录下创建6?个实时FIFO节点;如果需要,还必须自己创建新的节点。例如,要创建/dev/rtf80,需采用如下命令: ========================= mknod c 150 80; chmod 0666 /dev/rtf80 ========================= 其中,150是实时FIFO主数,而80是rtf80的次数。 从用户进程的角度看,实时FIFO可执行标准文件操作。从实时任务来看,FIFO有两种通信方式:直接调用RTLinux FIFO功能,或将FIFO作为一个RTLinux设备驱动程序,并使用open()、close()、read()和write()操作。要想将FIFO作为一个设备驱动程序,就必须将rtl_conf.h中的配置变量CONFIG_RTL_POSIX_IO设定为1。 rtf_create_handler()可设置处理程序功能。每次Linux进程读或写FIFO时,rtl_fifo 驱动程序都要调用该处理程序。应注意的是,该处理程序驻留在Linux内核,因此当Linux 需要调用时,从该处理程序进行任何内核调用都是安全的。从该处理程序到实时任务间的最好通信方法是使用旗语或线程同步功能。最后,FIFO驱动程序还必须对内核存储器进行配置。因此,实时线程内的rtf_create()不应调用。相反,可调用init_module()中的rtf_create ()功能及cleanup_module()中的rtf_destroy()功能。

独立按键程序

/******************************************************************** * 文件名:独立按键.c * 描述: 该程序实现独立按键的判断,按了相应的独立按键后, 会在数码管上显示最先被按下的值,只有按复位按键或者重新开电才消失。* 创建人:2013年2月7日 * 版本号:1.0 * 杜邦线接法: 独立按键接法: P3.2接J8的1端。 P3.3接J8的2端。 P3.4接J8的3端。 P3.5接J8的4端。 用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。 P2.0对应J13的8端。 ***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit KEY4 = P3^5; //数码管的段码编码 uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /******************************************************************** * 名称: Delay_1ms() * 功能: 延时子程序,延时时间为1ms * x * 输入: x (延时一毫秒的个数) * 输出: 无 ***********************************************************************/ void Delay_1ms(uint i) { uint x,j; for(j=0;j

基于ARM的嵌入式教学平台的设计与应用

基于ARM的嵌入式教学平台的设计与应用 【摘要】为提高计算机类、电子类及电气控制类技师的技能水平,在技师学院全面开设嵌入式系统的课程以替代传统的8位单片机教学已是大势所趋。对于这种实践性与理论性同等重要的课程,除了讲授课程内容以外,还应该搭建完善的教学实验平台,供学生上机操作,以掌握ARM嵌入式系统的开发和设计技能。 【关键词】嵌入式系统ARM 微处理器S3C44B0X uClinux 内核 引言 嵌入式教学平台从结构上来看主要分为三个部分:底层的硬件平台,包含Boot Loader的操作系统层,以及最上面的应用层――应用程序的设计开发环境。根据嵌入式系统的现状与教学平台的实际需要,提出了既经济又实用的以ARM 加装uClinux基本的系统设计方案。 1 ARM的嵌入式系统研究背景及应用现状 嵌入式系统是以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可行性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统至今已经有30多年的历史了,嵌入式技术也经历了几个发展阶段。进入20

世纪90年代后,以计算机和软件为核心的数字化技术取得了迅猛的发展,不仅广泛渗透到社会经济、军事、交通、通信等相关行业,而且深入到家电、娱乐等各个领域,兴起了一场数字化技术革命。多媒体技术与internet应用的迅速普及,消费电子、计算机、通信技术一体化趋势明显,嵌入式技术再度成为研究的热点。 2 开设本课程的意义 基于ARM的嵌入式系统应用是如此的广泛,但“嵌入式”却鲜为人知,很多人在使用着嵌入式设备,享受着嵌入式给他们带来的便利和强大的功能时,并不知道嵌入式系统的存在。到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域:工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品,除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。因此,研究具有普遍的意义。目前,学校正在开设的传统的8位单片机技术的教学已不能适应学生就业市场的需求。鉴于以上原因,在嵌入式人才极其缺乏的今天,在职业技术学院办好嵌入式系统教学平台,为学生提供良好的学习环境,使其熟练掌握嵌入式系统的研究与开发技术,在提高技师学院学生的就业率并为其自身日后的发展打下良好基础的同时,对提高办学效益也具有重大的意义。因此,在职业技术学院开设基于ARM的嵌入式系统的课程已是大势

独立按键和矩阵按键

第八章独立按键和矩阵按键 我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备。前边讲的LED小灯、数码管、点阵都是输出设备,这节课我们学习一下最常用的输入设备——按键。在本节课的学习过程中我们还会穿插介绍一点硬件设计的基础知识。 8.1 单片机最小系统电路解析 8.1.1 电源 我们在学习过程中,很多指标都是直接用的概念指标,比如我们说+5V代表1,GND代表0等等这些。但在实际电路中是没有这么精准的,那这些指标允许范围是什么呢?随着我们所学的内容不断增多,大家要慢慢培养一种阅读手册的能力。 比如我们使用STC89C52RC单片机的时候,我们找到他的手册的11页,第二个选项,工作电压:5.5V-3.4V(5V单片机),这个地方就说明我们这个单片机正常的工作电压是个范围值,只要电源VCC在5.5V到3.4V之间都可以正常工作,电压超过5.5V是绝对不允许的,会烧坏单片机,电压如果低于3.4V,单片机不会损坏,但是也不能正常工作。而在这个范围内,最典型、最常用的电压值就是5V,这就是后面括号里“5V单片机”这个名称的由来。除此之外,还有一种常用的工作电压范围是2.7V-3.6V、典型值是3.3V的单片机,也就是所谓的“3.3V单片机”了。日后随着大家接触的东西慢慢增多,对这点会有更深刻的理解。 现在我们再顺便多了解一点,大家打开74HC138的数据手册,会发现74HC138手册的第二页也有一个表格,上边写了74HC138的工作电压范围,最小值是4.75V,额定值是5V,最大值是5.25V,可以得知它的工作电压范围是4.75V-5.25V。这个地方讲这些目的是让大家清楚的了解,我们获取器件工作参数的一个最重要,也是最权威的途径,就是通过器件的数据手册。 8.1.2 晶振 晶振通常分为无源晶振和有源晶振两种类型,无源晶振一般称之为crystal(晶体),而有源晶振则叫做oscillator(振荡器)。 有源晶振是一个完整的谐振振荡器,他是利用石英晶体的压电效应来起振,所以有源晶振需要供电,当我们把有源晶振电路做好后,不需要外接电路,它就可以主动产生振荡频率,并且可以提供高精度的频率基准,信号质量比无源信号好。 而无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。相对价格来说,无源晶振要比有源晶振价格便宜很多。无源晶振两侧通常都会有两个电容,一般其容值都选在10pF~40pF之间,如果手册中有具体电容大小的要求则要根据要求来选电容,如果手册没有要求,我们用20pF 就是比较好的选择,这是一个长久以来的经验值,具有极其普遍的适用性。 我们来认识下比较常用的两种晶振的样貌,如图8-1和图8-2所示。

独立按键汇编程序

急求独立按键汇编程序 我自己写的一个拷面包炉的程式,可以给你参考。我的QQ:597430854 ;........................................................ K1 BIT P3.0 ;定义向下键在p3.0 K2 BIT P3.1 ;定义向上键在p3.1 K3 BIT P3.2 ;定义取消键在p3.2 K4 BIT P3.3 ;定义半烤键在p3.3 K5 BIT P3.4 ;定义开始键在P3.4 ;........................................................ LED1 BIT P1.6 ;定义LED1在P1.6 LED2 BIT P1.5 ;定义LED2在P1.5 LED3 BIT P1.4 ;定义LED3在P1.4 LED4 BIT P1.3 ; ... LED5 BIT P1.2 ; ... LED6 BIT P1.1 ; ... LED7 BIT P1.0 ; ... ;........................................................ RY1 BIT P3.5 ;继电器1半烤定义在P3.5口 RY2 BIT P3.7 ;继电器2定义在P3.7口 SPK BIT P1.7 ;喇叭定义在P3.4口 SS EQU 200 ;秒数值5MS*200=1秒 TSEC EQU 30H ;秒数变量 ID EQU 31H ;ID变量 TCOUNT EQU 32H ;秒数计数器 ORG 0H JMP START0 ORG 0BH JMP SET0 START0:CLR RY1 ;继电器1释放 CLR RY2 ;继电器2释放

《嵌入式系统》课程设计题目 (1)

《嵌入式系统》 课程设计题目及要求 设计报告要求: 1.课题研究意义、现状及应用分析; 2.课题总体方案设计及功能模块介绍; 3.系统硬件平台及接口设计; 4.系统软件功能设计,包括必要的注释; 5.总结、心得体会; 6.附主要的参考文献。 课程设计题目:(以下题目仅供参考,可自拟题目) 基于ARM的LED点阵显示系统的设计与实现 要求:在ARM开发平台下,实现接收串口发送的数据,在16*16的点阵屏上显示,按键上设置几个固定显示内容,当按下相应的按键时,点阵屏上显示相应的内容。 基于ARM的环境监测系统的设计与实现 要求:在ARM开发平台下,实现采集环境的温度、湿度、烟雾等参数的设定,在液晶屏上显示出来。

基于ARM的步进电机控制系统的设计与实现 要求:在ARM开发平台下,实现步进电机的驱动,可通过实验平台上的电位器调整电机的转速,或者用按键控制电机的运转。 ARM实验平台的Android移植 要求:将开源的Android平台移植到ARM实验平台下。 基于ARM的CAN总线通讯系统设计与实现 要求:在嵌入式ARM平台CAN通信程序,实现两个ARM平台或ARM与其它设备的CAN通信。可将CAN总线接收到的数据通过串口输出,同时可将串口接收到的数据通过CAN总线接口发送出去。 基于ARM的RS485通讯系统设计与实现 要求:在嵌入式ARM平台及Linux环境下编程RS485通信程序,实现两个ARM平台或ARM与PC机之间RS485通信。 基于ARM的嵌入式Web服务器设计与实现 要求:在嵌入式ARM平台及Linux环境下移植一个嵌入式Web服务器(如BOA或THTTPD),并实现基于ARM平台的Web动态网页监测系统。 基于ARM的嵌入式数据采集系统设计与实现 要求:在嵌入式ARM平台下编写ADC接口的模入/模出程序,实现基于ARM 平台的嵌入式3路模拟信号的数据采集,并将采集到的数据通过串口或液晶

嵌入式程序设计复习题

嵌入式系统程序设计练习题; 6.任务级的调度是由函数OSSched()完成的,而【中断级】的调度是由函数OSIntExt() 完成。对于 7.任务切换其实很简单,由如下2步完成: 8.任务的5种状态。 度法,各个任务彼此合作共享一个CPU。 的控制权。 11.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥 (可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。)

13.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函 量予以【保护】。 14.每个任务都有其优先级。任务越重要,赋予的优先级应【越高】。 数据结构的初始化。 被μC/OS-Ⅱ调用。 22.μC/OS-II中的信号量由两部分组成:一个是信号量的【计数值】,它是一个16位的无符号整数(0 到 25.在使用OSTaskCreate创建任务时,若需要TaskData作伪参数传递给任务Task,并从任务Task中获得传入的字符参数值,请在下面【】填上合适的代码。 char TaskData=?A?; void Task (void *pdata) { for (;;) { OSSemPend(RandomSem, 0, &err); y = (int) (*(char *)pdata - 'A'); OSSemPost(RandomSem); PC_DispChar(10, 25, value, DISP_FGND_WHITE +DISP_BGND_BLUE); OSTimeDly(1); } } 26. 在μC/OS-II在任务Task1中使用邮箱函数OSMboxPost()发送字符;而在Task2中接收OSMboxPost ()字符, 请在下面【】填上合适的代码。 void Task1 (void *data) { char txmsg;

相关文档
最新文档