单片机屏幕显示及键盘


TM1638_Write(0x00); digitalWrite(STB,HIGH); }
void setup () { pinMode(STB,OUTPUT); pinMode(CLK,OUTPUT); pinMode(DIO,OUTPUT); //让三个脚都是输出状态 } void loop() { unsigned char i; init_TM1638(); for(i=0;i<8;i++) Write_DATA(i<<1,tab[0]); while(1) { i=Read_key(); if(i<8) { num[i]++; while(i==Read_key()); if(num[i]>15) num[i]=0; Write_DATA(i*2,tab[num[i]]); Write_allLED(1<<i); } } //等待按键释放 //读按键值 //初始化寄存器 //初始化TM1638
} }
//TM1638初始化函数
void init_TM1638() { unsigned char i; Write_COM(0x8b); Write_COM(0x40); //亮度 (0x88-0x8f)8级亮度可调 //采用地址自动加1 //
digitalWrite(STB,LOW); TM1638_Write(0xc0); for(i=0;i<16;i++) //设置起始地址 //传送16个字节的数据
//发送命令字
//读键扫数据 命令
//4个ห้องสมุดไป่ตู้节数据合成一个字节
if((0x01<<i)==key_value) break; } return i; } void Write_DATA(unsigned char add,unsigned char DATA) { Write_COM(0x44); digitalWrite(STB,LOW); TM1638_Write(0xc0|add); TM1638_Write(DATA); digitalWrite(STB,HIGH); } void Write_allLED(unsigned char LED_flag) { unsigned char i; for(i=0;i<8;i++) { if(LED_flag&(1<<i)) Write_DATA(2*i+1,1); else Write_DATA(2*i+1,0); //控制全部LED函数,LED_flag表示各个LED状态 //指定地址写入数据
#define DATA_COMMAND #define DISP_COMMAND #define ADDR_COMMAND
0X40 0x80 0XC0
//TM1638模块引脚定义 int DIO = 2; int CLK = 1; int STB = 0; //这里定义了那三个脚 //共阴数码管显示代码 unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned char num[8]; //各个数码管显示的值
}
void TM1638_Write(unsigned char { unsigned char i; pinMode(DIO,OUTPUT); for(i=0;i<8;i++) {
DATA)
//写数据函数
digitalWrite(CLK,LOW); if(DATA&0X01) digitalWrite(DIO,HIGH); else digitalWrite(DIO,LOW); DATA>>=1; digitalWrite(CLK,HIGH); } } unsigned char TM1638_Read(void) { unsigned char i; unsigned char temp=0;; pinMode(DIO,INPUT);//设置为输入 for(i=0;i<8;i++) { temp>>=1; digitalWrite(CLK,LOW); if(digitalRead(DIO)==HIGH) temp|=0x80; digitalWrite(CLK,HIGH); //读数据函数
} return temp; }
void Write_COM(unsigned char cmd) { digitalWrite(STB,LOW); TM1638_Write(cmd); digitalWrite(STB,HIGH); } unsigned char Read_key(void) { unsigned char c[4],i,key_value=0; digitalWrite(STB,LOW); TM1638_Write(0x42); for(i=0;i<4;i++) { c[i]=TM1638_Read(); } digitalWrite(STB,HIGH); for(i=0;i<4;i++) { key_value|=c[i]<<i; } for(i=0;i<8;i++) {
合集下载

基于51单片机的USB键盘设计与实现

基于51单片机的USB键盘设计与实现

基于51单片机的USB键盘设计与实现
一、背景介绍
USB键盘是近些年来随着计算机科技发展而出现的一种新型输入设备。

它采用USB接口,是电脑设备接口标准由PS/2接口更换而来的,可以满
足现代电脑日益增长的输入需要。

现代联想主板,微星主板都采用了USB
接口出现,同时USB接口也可以有效投放鼠标、USB外置设备等。

是一种
非常有效的替代方案。

本文的主要目的是基于51单片机的USB键盘设计与实现,在此基础上,可以得出一个具有良好性能的USB键盘,它将成为计算机用户所不可
或缺的输入设备之一
二、功能要求
B键盘的硬件部分,采用51单片机作为核心,屏幕模块和按键
模块作为主要的输入设备。

2.支持USB1.1/2.0标准,能够兼容主流的主板及不同接口的设备,
实现多种输入功能并支持多种操作系统。

3.按键部分及其他硬件设计,需考虑到键盘的灵敏度、机械结构的耐
用性、按键的设计及密度等多方面因素,以提高使用者的操作方便性。

4.软件设计,在51单片机上实现USB键盘的驱动程序,在根据不同
接口的主板及设备对应的协议、功能及数据格式等配置相应的控制程序,
以保证其能够实现对应的输入功能。

三、硬件设计
1.主控:采用51单片机作为主控。

广州周立功单片机 ZLG7289A 串行接口 LED 数码管及键盘管理器件 说明书

广州周立功单片机 ZLG7289A 串行接口 LED 数码管及键盘管理器件 说明书
振荡器输出端 振荡器输入端 复位端
3.2.2 控制指令
ZLG7289A 的控制指令分为二大类 纯指令和带有数据的指令
1. 纯指令
(1) 复位 清除 指令
D7 D6 D5 D4 D3 D2 D1 D0
1
0
1
0
0
1
0
0
当 ZLG7289A 收到该指令后 将所有的显示清除 所有设置的字符消隐 闪烁等属性也被一起清除
D7 D6 D5 D4 D3 D2 D1 D0
00010101
d7
d6
d5
d4
d3
d2
d1
d0
该指令从 ZLG7289A 读出当前的按键代码 与其它指令不同 此命令的前一个字节 0001010B 为单片
机传送到 ZLG7289A 的指令 而后一个字节 d0 d7 则为 ZLG7289A 返回的按键代码 其范围是 0 3FH 无键按下时为 0xFF 各键键盘代码的定义 请参阅 ZLG7289A 的典型应用图 第 7 页 其中图中
26 27 28
/KEY SG-SA DP DIG0-DIG 7 OSC2 OSC1 /RESET
说明 正电源 悬空 接地 片选输入端 此引脚为低电平时 可向芯片发送指令及读取键盘数据 同步时钟输入端 向芯片发送数据及读取键盘数据时 此引脚电平上升沿表示数据 有效 串行数据输入/输出端 当芯片接收指令时 此引脚为输入端 当读取键盘数据时 此引脚在 读 指令最后一个时钟的下降沿变为输出端 按键有效输出端 平时为高电平 当检测到有效按键时 此引脚变为低电平 段 g—段 a 驱动输出 小数点驱动输出 数字 0 数字 7 驱动输出
0
0
7 段显示 0
01H
0

51单片机4×4矩阵键盘且在数码管最后一位显示汇编语言

51单片机4×4矩阵键盘且在数码管最后一位显示汇编语言

51下面是51单片机使用4×4矩阵键盘的汇编程序,并在数码管的最后一位显示一个字符:```ORG 0 ;程序从地址0开始MOV P1,#0FFH ;P1口设置为输入口MOV P0,#0FH ;P0口设置为输出口LOOP:MOV A,P1 ;读取P1口的值CJNE A,#0FFH,KEY_PRESSED ;判断是否有按键按下SJMP LOOP ;如果没有按键按下,继续循环KEY_PRESSED:MOV R0,A ;保存按键的值CLR P0.0 ;选定行0MOV A,P1ANL A,#0F0H ;按位与运算,保留列位的值CJNE A,#0F0H,COL0 ;判断是否有按键按下在第0列MOV A,#'0' ;如果在第0列按下按键,则A的值为0JMP DISP ;跳转到显示程序COL0:CLR P0.1 ;选定行1MOV A,P1ANL A,#0F0HCJNE A,#0E0H,COL1 ;判断是否有按键按下在第1列MOV A,#'1' ;如果在第1列按下按键,则A的值为1JMP DISP ;跳转到显示程序COL1:CLR P0.2 ;选定行2MOV A,P1ANL A,#0F0HCJNE A,#0D0H,COL2 ;判断是否有按键按下在第2列MOV A,#'2' ;如果在第2列按下按键,则A的值为2JMP DISP ;跳转到显示程序COL2:CLR P0.3 ;选定行3MOV A,P1ANL A,#0F0HCJNE A,#0B0H,COL3 ;判断是否有按键按下在第3列MOV A,#'3' ;如果在第3列按下按键,则A的值为3JMP DISP ;跳转到显示程序COL3:CLR P0.4 ;选定行4MOV A,P1ANL A,#0F0H4MOV A,#'4' ;如果在第4列按下按键,则A的值为4 JMP DISP ;跳转到显示程序COL4:CLR P0.5 ;选定行5MOV A,P1ANL A,#0F0HCJNE A,#0B0H,COL5 ;判断是否有按键按下在第5列 MOV A,#'5' ;如果在第5列按下按键,则A的值为5 JMP DISP ;跳转到显示程序COL5:CLR P0.6 ;选定行6MOV A,P1ANL A,#0F0HCJNE A,#0D0H,COL6 ;判断是否有按键按下在第6列 MOV A,#'6' ;如果在第6列按下按键,则A的值为6 JMP DISP ;跳转到显示程序COL6:CLR P0.7 ;选定行7MOV A,P1ANL A,#0F0HCJNE A,#0E0H,COL7 ;判断是否有按键按下在第7列 MOV A,#'7' ;如果在第7列按下按键,则A的值为7 JMP DISP ;跳转到显示程序COL7:MOV A,#00HJMP EXIT ;如果没有按下任何键,退出程序DISP: ;数码管显示程序MOV R1,#100B ;延时计数器初始化MOV P2,A ;把按键值存入P2口MOV A,#07HANL A,P0 ;从P0口读取选定的行值MOV P0,A ;根据选定的行值输出相应的值ACALL DELAY ;调用延时程序MOV P0,#0FH ;关闭所有行DJNZ R1,$ ;当延时计数器不为0时,继续延时MOV A,#0FHMOV P0,A ;清除所有显示JMP LOOP ;跳转回主程序EXIT:MOV P2.7,1 ;在数码管的最后一位显示字符1SJMP EXIT ;无限循环DELAY: ;延时程序MOV R2,#75DMOV R3,#200D DELAY3:DJNZ R3,$DJNZ R2,DELAY2 RET```。

06 12864LCD显示计算器键盘按键实验

06 12864LCD显示计算器键盘按键实验

目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。

设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。

重点就是各部分硬件的连接设计以及程序的编写。

本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。

将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。

1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。

3、分析一下此程序的各部分的功能,各零件的工作原理。

4、对程序进行调试,分析调试结果,观察并得出结论。

1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。

4.3 单片机键盘接口电路设计

4.3 单片机键盘接口电路设计
}
//函数功能:键盘扫描 //检测到有键按下 //延时10ms再去检测 //按键k1被按下 //按键k2被按下 //按键k3被按下 //按键k4被按下
▲▲▲
独立式键盘接口设计案例
void forward(void) { P3=0xfe; led_delay(); P3=0xfd; led_delay(); P3=0xfb; led_delay(); P3=0xf7; led_delay(); P3=0xef; led_delay(); P3=0xdf; led_delay(); P3=0xbf; led_delay(); P3=0x7f; led_delay(); }
break;
}
}
}
▲▲▲
独立式键盘接口设计案例
void key_scan(void) { P1=0xff; if((P1&0x0f )!=0x0f ) { delay10ms(); if(S1==0) keyval=1; if(S2==0) keyval=2; if(S3==0) keyval=3; if(S4==0) keyval=4; }
//处理按下的k1键,“……”为处理程序 //跳出switch语句 //处理按下的k2键 //跳出switch语句 //处理按下的k3键 //跳出switch语句 //处理按下的k4键 //跳出switch语句 //处理按下的k5键 //跳出switch语句
独立式键盘接口设计案例
1.独立式键盘的查询工作方式
{
case 1:forward(); //键值为1,调用正向流水点亮函数
break;
case 2:backward(); //键值为2,调用反向流水点亮函数
break;
case 3:Alter(); //键值为3,调用高、低4位交替点亮函数

基于单片机的LED大屏幕显示系统设计

基于单片机的LED大屏幕显示系统设计

基于单片机的LED大屏幕显示系统设计引言:随着科技的不断发展,LED大屏幕在现代生活中得到越来越广泛的应用。

本文将介绍一种基于单片机的LED大屏幕显示系统的设计方案。

一、需求分析1.需要一个显示屏幕较大的系统,以便能够在远距离外也能清晰看到信息。

2.需要一个可以远距离控制显示内容的系统。

3.显示内容可以动态变化,能够显示文字、图片、动画等多种形式。

4.系统需要易于维护和操作。

二、系统设计1.硬件设计为了满足显示屏幕大的需求,我们可以选择一个高分辨率的LED显示屏。

为了控制显示内容,我们可以选择一款强大且易于操作的单片机作为控制主板。

同时,还需要一个电源模块来提供电力。

2.软件设计为了实现动态变化的显示内容,我们需要设计一个用户界面,使用户能够通过输入设备(例如键盘、遥控器等)来输入显示内容。

同时,还需要一个软件模块来实现内容的转换和发送。

单片机需要能够接收和解析输入的指令,并按照指令来动态更新显示内容。

三、详细设计1.硬件设计选择合适的LED显示屏幕,可以根据需求选择合适的尺寸和分辨率。

设计一个控制主板,使用单片机作为核心控制模块,通过与电源模块的配合,提供稳定的电力供应。

同时,还需要与显示屏幕的接口板连接,实现信息的传输。

2.软件设计设计用户界面,可以使用图形界面,使用户能够直观地操作系统。

通过输入设备输入指令,在单片机上设计相应的软件模块,实现接收、解析和处理指令的功能。

根据指令来更新显示内容。

四、系统实现1.硬件实现按照硬件设计方案进行组装和连接。

选择合适的单片机和电源模块,根据显示屏幕的接口要求进行连接,确保电路连接正确无误。

2.软件实现设计用户界面,根据用户的需求和喜好进行界面的设计。

实现并调试单片机的软件模块,确保接收、解析和处理指令的功能正常运行。

五、系统测试在完成系统实现后,需要进行一系列的测试,以确保系统的正常工作和稳定性。

可以进行功能测试、稳定性测试、兼容性测试等,以保证系统的可靠性和稳定性。

【优】单片机矩阵键盘接口最全PPT资料

电气自动化技术专业 教学资源库
单片机控制技术
知识点:单片机矩阵键盘接口
单片机控制技术
单片机矩阵键盘接口
目录
1 认识单片机键盘 2 矩阵式键盘接口电路 3 矩阵键盘按键识别技术
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
单片机应用系统通常需要优秀的人机交互接口。键盘是与单片机进行人机
一般,交矩阵互式的键盘最的行基线本由单的片机途输径出口。控制按,键列线的连接输单入片机状的输态入本口。质上是一个开关量,通过按键来 第二步设:向置所控有的制列线功上能输出或高电输平入,行数线输据出,低电以平(控行制列反单转)片,机然后运读入行列。信号。
按结构原理分类
(1)触点式按键——机械式、导电橡胶式 (2)无触点按键——电气式、磁感应按键
(前者造价低,后者寿命长)
按接口原理类
(1)独立式键盘——每键各接一根输入线 (2)行列式(矩阵)键盘——按行列交叉连线 (3)屏幕式键盘——触摸屏
按译码方式分类
(1)编码键盘——通过硬件实现译码 (2)非编码键盘——通过扫描程序实现译码
单片机矩阵键盘接口
三、矩阵键盘按键识别技术
首先判断是否有键按下:向所 有列线上输出低电平,再读入所 有的行信号; 如有任何一个键被按下,则读 入的行电平则不全为高;如无键 按下,则全高电平。
其次,逐列扫描判断具体的按键:
就是向列线上逐列送低电平。如果 读入的行值为全高,则表示此列无 键按下,否则有键按下。
单片机控制技术
单片机矩阵键盘接口
一、认识单片机键盘
独立式按键编程
开始
有按键闭合否 Y
延时10ms,软件去抖动
图3 独立式按键编程流程图
N

按键与显示电路的设计与实现


按下抖动
释放抖动
按键抖动波形
4.3.5键盘抖动及其消除方法: 硬件削抖电路
4.3.6独立式键盘:
4.3.6矩阵式键盘: 矩阵式键盘工作原理
4.3.6矩阵式键盘: 扫描法
4.3.6矩阵式键盘: 线反转法
4.3.7键盘工作方式:
扫描方式: 中断方式:
4.4 任务实施:
1.仿真 2.焊接、调试 3.编写程序模块 4.整理制作报告
4.3.4 LED的驱动电路:
静态显示驱动电路
4.3.4 LED的驱动电路:
动态显示驱动电路
问题: 在LED显示电路设计中,段码驱动和位 码驱动应选用何种驱动方式?有什么差别 ?
工作任务: 如何用74HC373芯片设计一种廉价的基于 总线的LED显示电路?
4.3.5键盘抖动及其消除方法:
键被按下 闭合稳态
输出锁存
ICM7212 BCD-七段译码/输出驱动器 段驱动8mA 可静态驱动四位共阳极LED
ICM7218
8位动态BCD-七段译码器
段驱动20mA 可动态驱动8位共阳极LED
位驱动
动态扫描频率250HZ
170mA
常用的硬件译码集成电路
问题: •LED显示器与单片机接口,应选用哪 种译码方式?为什么?
6
7DH
82H
P
73H
8CH
7
07H
F8H

40H
BFH
8
7FH
80H
全灭
00H
ห้องสมุดไป่ตู้
FFH
9
6FH
90H
问题: 单片机控制电路中,应如何选择LED 显示器的结构?
4.3.2 LED显示器的显示方式:

单片机

1 系统硬件介绍本设计通过单片机实现喇叭播放音乐和LCD液晶显示文字、图片、动画,并通过键盘进行控制操作,实现功能的选择。

单片机使用AT89C55WD芯片,容有20K字节可编程闪烁存储器,能存放做够的程序容量。

LCD使用128*64液晶屏,通过控制驱动器,能显示图片和文字。

另外使用I2C总线扩展,I2C总线是一种用于IC器件之间连接的二线制总线。

它通过SDA(串行数据线)及SCL(串行时钟先)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件,不管是单片机、存储器、LCD驱动器还是键盘接口。

1.1 单片机简介所谓单片机,通俗的来讲,就是把中央处理器CPU(Central Processing Unit),存储器(memory),定时器,I/O(Input/Output)接口电路等一些计算机的主要功能部件集成在一块集成电路芯片上的微型计算机。

单片机又称为“微控制器MCU”。

中文“单片机”的称呼是由英文名称“Single Chip Microcomputer”直接翻译而来的。

顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。

因为它体积小,通常都藏在被控机械的“肚子”里。

它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能微电脑型”,如智能型热水器等。

本设计用到的单片机是AT89C55WD,下面就以AT89C55WD为例,结合本设计所用到的内容,简单介绍一下单片机的基础知识。

1.1.1 AT89C55WD简介AT89C55WD是一个低电压,高性能CMOS 8 位单片机,片内含有20KB 的可重写快速闪存存储器和只读程序和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,引脚兼容工业标准芯片,采用通用编程方式,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微处理器的AT89C55WD可为您提供许多高性价比的解决方案,适用于多数嵌入式应用系统。

数码管显示键盘号

case 4: keyno += 8;break;
case 8ቤተ መጻሕፍቲ ባይዱ keyno += 12;break;
}
}
//主函数
void main(void)
{
P0 = 0x00;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //扫描键盘获得按键序号
{
key_scan();
}
if(pre_keyno != keyno)
课程名称
单片机原理及应用
实验名称
数码管显示4*4矩阵键盘按键号
实验内容:
按下任意键时,数码管都会显示其按键的序号,扫描程序首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
实验步骤:
1.根据以下电路图,在Proteus中找到相应元器件并接线。
元器件:AT89C51、button、cap、res、sounder、respack-8、7SEG-COM-BLUE、CRYSTAL,分别放入开关、红色LED灯、电阻。
delayms(1);
//有键按下后,其中一列将变为低电平
i = P1^0x0f;
//判断按键发生在哪一列
switch(i)
{
case 1: keyno = 0;break;
case 2: keyno = 1;break;
case 4: keyno = 2;break;
case 8: keyno = 3;break;
{
P0 = ~disp_buff[keyno]; //显示,共阳极段码取反作为共阴极段码
pre_keyno = keyno;
}
delayms(100);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档