单片机第五讲-按键与数码管的程序设计

合集下载

51单片机:中断实现按键按一下数码管从00加到99循环(C语言)

51单片机:中断实现按键按一下数码管从00加到99循环(C语言)

51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)
题⽬要求:
在51单⽚机上通过C语⾔编写代码,使⽤中断,按键按⼀下数码管上⾯的数字从00开始加1,实现00——99的循环
准备⼯作:
keil建⽴⼯程
proteus仿真验证
代码如下:
/*
*功能:⽤中断实现开关每按⼀次,数码管数字加⼀,
*实现00-99的循环
*/
#include<reg52.h>
sbit SEG1 = P1^0;//定义显⽰⼗位数码管
sbit SEG2 = P2^0;//定义显⽰个位数码管
sbit key = P3^2;//定义按键
int sum =0;
int i,j;
unsigned char code DSY_CODE[]={0xC0,0xF9,0xA4,
0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90};//共阳极数码管
void main()
{
IE =0x81;//使⽤外部中断0
IT0 =1;
while(1);
}
void EX0_INT(void) interrupt 0
{
sum++;
i = sum/10;//⼗位数字
j = sum%10;//个位数字
if(sum ==100)
{
sum =0;
}
P1 = DSY_CODE[i];//数码管显⽰⼗位数字
P2 = DSY_CODE[j];//数码管显⽰个位数字
}
(写的不是很规范,仅供参考)
仿真结果:。

单片机按键程序设计

单片机按键程序设计

单片机按键程序设计单片机按键的基本原理其实并不复杂。

通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。

在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。

在实际的按键程序设计中,有多种方式可以实现按键检测。

其中一种常见的方法是查询法。

这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。

以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。

当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。

除了查询法,还有中断法可以用于按键检测。

中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。

```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。

按键控制数码管和流水灯设计报告实验报告要点

按键控制数码管和流水灯设计报告实验报告要点

摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。

单片机按键课程设计

单片机按键课程设计

单片机按键课程设计一、课程目标知识目标:1. 让学生掌握单片机基础知识和按键的工作原理;2. 帮助学生了解按键在单片机系统中的应用和编程方法;3. 使学生能够运用所学知识设计简单的单片机按键控制系统。

技能目标:1. 培养学生动手实践能力,能够独立完成单片机按键电路的搭建;2. 提高学生编程能力,掌握单片机按键程序的设计与调试;3. 培养学生解决问题的能力,能够针对实际需求设计合适的单片机按键方案。

情感态度价值观目标:1. 培养学生对单片机技术及电子制作的兴趣,激发创新意识;2. 培养学生团队合作精神,学会分享和交流;3. 增强学生面对困难的勇气和毅力,培养勇于挑战的精神。

课程性质分析:本课程为实践性较强的课程,注重理论知识与实践操作的相结合,以培养学生的动手能力和创新能力为核心。

学生特点分析:学生处于初中或高中年级,具有一定的物理和数学基础,对电子技术和编程有一定了解,好奇心强,喜欢动手实践。

教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的积极性,引导学生主动参与,提高学生的实践能力和创新能力。

在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理、引脚功能等,结合教材相关章节,为学生建立单片机的基本概念。

2. 按键工作原理:讲解按键的物理原理、电路连接方式、去抖动方法等,使学生了解按键在单片机系统中的应用。

3. 单片机按键编程:教授单片机按键程序设计方法,包括I/O口编程、中断处理等,结合教材实例进行讲解。

4. 按键电路搭建:指导学生动手搭建单片机按键电路,学会使用面包板、电子元件等,培养实际操作能力。

5. 按键程序设计与调试:教授编程软件的使用,引导学生编写、调试按键程序,掌握程序设计的基本方法。

6. 应用实例分析:分析典型单片机按键控制系统实例,使学生了解实际应用中的设计方法和技巧。

教学进度安排:1. 第1课时:单片机基础知识及按键工作原理介绍;2. 第2课时:单片机按键编程方法讲解;3. 第3课时:按键电路搭建及编程实践;4. 第4课时:按键程序设计与调试;5. 第5课时:应用实例分析及总结。

单片机按键数码管复用电路

单片机按键数码管复用电路

单片机按键数码管复用电路单片机按键数码管复用电路引言:在单片机的应用中,经常需要用到按键和数码管。

按键用来输入控制信号,数码管用来显示数字、字符等信息。

然而,由于单片机的I/O口数量有限,如果每个按键和数码管都使用一个单独的I/O口,会导致I/O口不够用的情况发生。

因此,合理利用按键和数码管的复用电路非常重要。

本文将介绍单片机按键数码管的复用电路,并分析其中的原理和实现方法。

一、按键的复用电路按键的复用电路是通过按键矩阵来实现的。

按键矩阵由行线和列线组成,行线连接按键的所有行脚,列线连接按键的所有列脚。

通过扫描行线和读取列线的状态,可以判断哪个按键被按下。

按键矩阵可以灵活配置,可以增加或减少按键的数量。

使用按键矩阵可以大大节省单片机的I/O口数量,提高资源利用率。

二、数码管的复用电路数码管的复用电路是通过时分复用技术来实现的。

时分复用是指通过对数码管的多位进行快速切换,使得人眼无法察觉到数码管的刷新过程,从而实现多位数码管的显示。

数码管复用电路一般由控制芯片和显示芯片组成。

控制芯片用来控制数码管的刷新,显示芯片用来将数据发送到数码管上,实现数字、字符的显示。

通过时分复用技术,可以仅使用少量的I/O口就能同时驱动多个数码管,降低了对I/O口的占用。

三、按键数码管的复用电路将按键和数码管的复用电路相结合,可以进一步减少对单片机I/O 口的占用。

具体实现方式为:将按键矩阵和数码管的行线连接在一起,将按键矩阵和数码管的列线连接在一起。

这样,就可以通过扫描行线和读取列线的状态来实现按键的检测,同时通过控制数码管的刷新和显示芯片来实现数码管的显示。

这样,既能实现按键的输入功能,又能实现数码管的显示功能,同时还能大大节省单片机的I/O口数量,提高资源利用率。

结论:单片机按键数码管复用电路是一种灵活、高效的电路设计方案。

它通过按键矩阵和时分复用技术相结合,实现了按键和数码管的复用。

这种复用电路不仅节省了单片机的I/O口数量,提高了资源利用率,而且还能满足应用中对按键和数码管的需求。

[知识]按键控制数码管和流水灯设计报告实验报告

[知识]按键控制数码管和流水灯设计报告实验报告

摘要000单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。

本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。

通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。

用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。

在硬件电路的基础上加上软件程序的控制来实现本设计。

其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。

000关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the000 Keywords: SCM, water lights, digital tubes, control system000键盘控制流水灯和数码管实验报告00目录000一设计的目的 (200)二任务描述及方案设计 (300)1. 任务描述 (300)2. 方案设计 (300)三硬件设计方案 (30)001. Msp430f149单片机的功能说明 (30)2. 显示器功能 (40)3. 复位电路 (40)4. 按键的部分 (40)5. 74HC573的特点 (4)0006. 流水灯和数码管电路原理图 (40)007. 元器件清单 (40)四程序设计方案 (50)001. 用IAR Embedded W orkbench软件编程序 (5)002. 仿真电路图 (60)五实物实验 (70)001. 实物图 (7)002. 测试结果与分析 (700)六结论 (11)000八参考文献 (16)000一、设计目的0001、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;0002、培养学生实践动手能力及独立分析和解决工程实践问题能力;003、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。

单片机实验五按键及七段数码管实验

单片机实验五按键及七段数码管实验

单片机实验五按键及七段数码管实验第一篇:单片机实验五按键及七段数码管实验实验五按键及七段数码管实验一、实验目的1、熟悉keil软件;2、掌握矩阵式按键的原理;3、掌握七段数码管显示的原理;4、掌握STC单片机的按键及数码管程序编写及下载;二、实验要求1、编写矩阵式按键的读取程序、七段数码管的动态显示程序,并将程序结合在一起,产生某一按键按下,显示对应键值的程序。

2、编写串行通信的发送及接收程序,实现串行口跟PC及的通信,并在PC机上用串口调试工具观察实验结果;3、利用keil软件调试程序,并产生.hex文件;4、将.hex文件利用STC单片机下载工具下载到单片机最小系统中,并观察LED灯的显示状态;5、提交实验报告,报告包含程序及LED的显示结果。

三、实验内容1、打开keil软件,熟悉软件的菜单、工作界面及工具。

然后按照keil的编程步骤编写程序(创建工程----选择单片机AT89C51----新建源文件----保存为C程序----编写完整的C51程序----将文件添加到工程----编译并修改错误----连接产生.hex文件)。

2、打开STC下载软件,将keil生成的.hex文件打开,下载到最小系统板,测试程序并观察实验结果。

3、按键及七段LED的程序,实现更多的LED与按键结合的效果。

四、实验说明1、程序中使用的按键及LED灯的IO端口要与自己的单片机最小系统板对应;2、按键程序注意抗消抖;3、思考计算器程序如何实现;第二篇:单片机数码管显示实验实验一数码管实验一、实验目的1.了解数码管的显示原理;2.掌握JXARM9-2440 中数码管显示编程方法二、实验仪器JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、串口连接线、PC机。

三、实验原理7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。

LED显示器的接口一般有静态显示与动态显示接口两种方式。

单片机指令编程实例数码管显示程序设计

单片机指令编程实例数码管显示程序设计

单片机指令编程实例数码管显示程序设计在单片机的开发中,数码管是一种常见的输出设备。

通过编程控制数码管的显示,我们可以实现各种功能,如计时、计数、温度显示等。

本文将介绍一个简单的单片机指令编程实例,用于设计一个数码管显示程序。

一、概述数码管是一种由七段LED组成的显示器件,每个数码管可以显示0-9的数字。

通过合理的控制,可以将多个数码管连接起来并显示多位数值。

在这个实例中,我们将使用AT89C51单片机和共阳数码管进行程序设计。

二、硬件连接将数码管的七段LED引脚依次连接到单片机的GPIO引脚,并将共阳极引脚连接到单片机的VCC。

为了方便控制,可以利用74HC595芯片实现数码管的级联连接,这样只需要使用三个IO口即可控制多个数码管。

三、程序设计程序设计的主要逻辑是通过编写一系列的指令来控制数码管的显示。

以下是一个简单的实例程序:```#include <reg51.h>sbit SDA = P1^0; // 74HC595芯片的串行数据引脚sbit SCK = P1^1; // 74HC595芯片的时钟引脚sbit RCK = P1^2; // 74HC595芯片的输出使能引脚unsigned char code num[10] = {0xC0, // 数字0的显示码0xF9, // 数字1的显示码0xA4, // 数字2的显示码0xB0, // 数字3的显示码0x99, // 数字4的显示码0x92, // 数字5的显示码0x82, // 数字6的显示码0xF8, // 数字7的显示码0x80, // 数字8的显示码0x90 // 数字9的显示码};void delay(unsigned int t) {unsigned int i;while (t--) {for (i = 0; i < 1000; i++);}}void writeByte(unsigned char dat) {unsigned char i;for (i = 0; i < 8; i++) {SDA = (dat & 0x80) ? 1 : 0;dat <<= 1;SCK = 0;SCK = 1;}}void display(unsigned char n) {unsigned char i;for (i = 0; i < 8; i++) {writeByte(num[n]);RCK = 1;RCK = 0;delay(1); // 延时一段时间,使数码管显示出来}}void main() {unsigned char i;while (1) {for (i = 0; i < 10; i++) {display(i);delay(500); // 每个数字显示的时间间隔为500ms}}}```以上程序通过将各个数字的显示码存储在一个数组中,然后通过控制74HC595芯片的串行数据引脚、时钟引脚和输出使能引脚,来实现数码管的动态显示。

单片机原理及接口技术第5章 IO口应用-显示与开关键盘输入

单片机原理及接口技术第5章  IO口应用-显示与开关键盘输入

图5-1
发光二极管与单片机并行口的连接
5
如果端口引脚为低电平,能使灌电流Id从单片机的外部流入内部,则将
大大增加流过的灌电流值,如图5-1(b)所示。所以,AT89S51单片机任 何一个端口要想获得较大的驱动能力,要采用低电平输出。 如果一定要高电平驱动,可在单片机与发光二极管之间加驱动电路,如 74LS04、74LS244等。 5.1.2 单片机I/O端口控制发光二极管的编程 发光二极管与单片机的I/O端口的连接,如图5-1(b)所示。如要点亮 某发光二极管,只需该I/O端口位写入“0”即可。下面通过一个例子介绍如
21
图5-6 4位LED静态显示的示意图
示字符。这样在同一时间,每一位显示的字符可以各不相同。但是,静态
显示方式占用I/O口线较多。 对于图5-6所示电路,要占用4个8位I/O口(或锁存器)。如果数码管 数目增多,则还需要增加I/O口的数目。在实际的系统设计中,如果显示位 数较少,可采用静态显示方式。但显示位数较多时,为了降低成本,一般 采用动态显示方式。 2. 动态扫描显示方式 显示位数较多时,静态显示所占用的I/O口多,为节省I/O口与驱动电路
单片机控制的8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字 符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到
送入下一个显示字符的段码。因此,静态显示方式的显示无闪烁,亮度较
高,软件控制比较容易。 图5-6所示为4位LED数码管静态显示电路,各个数码管可独立显示,
只要向控制各位I/O口锁存器写入相应的显示段码,该位就能保持相应的显
闭合时,P3.0引脚为低电平。单片机对开关状态的检测是由程序检测
10
图5-3
开关、LED发光二极管与P1口的连接

avr-第五讲-按键与数码管的程序设计-文档资料

avr-第五讲-按键与数码管的程序设计-文档资料


V C
输入状态IO寄存器设置
DDRx某一位置0,相应位的IO口被设置为输入 PORTx某一位置1,使能对应IO口相应位的上拉电阻 PINx的对应位是输入的数据,0或1
C
1
0
0
k
~
2
0
0
R
?
k
InPut
主讲人:尹延辉
版权:力天电子

InPut
选择结构语句


关系运算符和关系表达式
尹延辉数码管扫描原理多位数码管的各个位均可以单独显示不同的数据但一个时刻只能点亮一位依次点亮多位数码管中的各个位由于人眼的视觉暂留效应看起是来多位同时点亮请观看程序演示谢谢你的阅读知识就是财富丰富你的人生
AVR单片机软硬件设计教程-入门篇
——学单片机就要学AVR!
主 讲: 尹延辉 策 划:张 勇
学习板:LT-Mini-M16
主讲人:尹延辉
版权:力天电子

八段数码管
G N


八段数码管
由八段LED构成 各LED阴极或阳极并在一起,称为“位选线”:共阴、共 阳 其余8个引脚各自引出,称为“段选线”,各段可以分别控 制
1 0 a A 1 9 6 b 8 c A
a
L
E
b
L
E

c
L
E
d
L
E
e
L
E
5
4
小于<小于或等于<=大于>大于或等于>=等于==不等于!=


逻辑运算符和逻辑表达式
逻辑与&&逻辑或||逻辑非!

if语句结构
if(表达式1) 语句1 else if(表达式2) 语句2 else 语句3

AVR单片机学习五按键与数码管的程序设计

AVR单片机学习五按键与数码管的程序设计

AVR单片机学习(五)按键与数码管的程序设计按键与数码管的程序设计AVR IO口的输入模式与上拉电阻选择结构语句与按键的查询方式程序设计数码管基本原理扫描方式显示多位数码管一、输入状态IO寄存器设置1、DDRx某一位置0,相应位的IO口被设置为输入2、PORTx某一位置1,使能对应IO口相应位的上拉电阻3、PINx的对应位是输入的数据,0或1选择结构语句一、关系运算符和关系表达式小于; 大于或等于== 不等于!=二、逻辑运算符和逻辑表达式逻辑与&&逻辑或||逻辑非!三、if 语句结构if(表达式1)语句1elseif(表达式2)语句2else 语句3四、switch语句结构switch(表达式){case常量1:表达式1case常量2:表达式2.........default:表达式n}按键的查询方式程序设计一、PIND & (1第一个是PD2 上一段接VCC 其他都是一段接IO(PD3 PD6 PD7)口另一端接地线。

所以当按键闭合时候相应IO都输入一个0,当按键抬起来的时候IO输入多少呢?所以这些IO口必须将上拉电阻进行使能,将按键打开相当于输入一个1.所以我们判断这3个按键按没按下去的话,就判断输入是不是0就行了。

对于第一个按键如果按下输入是1,当抬起来时候由于AVR内部不带下拉电阻的,所以按键打开时候输入是0.所以就需要判断某一位是0,还是1.某一位是0还是1就用到了& 与运算了。

1 跟1与就1 1 与0 就是0上面代码(temp& (1(temp & 0b01000000) temp本身值不变,只是结果来判断某一位是0还是1比如:PD6上的K3因为PD6 所以 PIND&(1三、PIND & (1除非你上电之前一直讲按键按下,否则上电的一瞬间程序就执行到while(1);了所以要将他们加入到死循环里面如下图这样就实现了按键的不停的检测。

单片机-4x4个矩阵按键控制数码管显示数字程序

单片机-4x4个矩阵按键控制数码管显示数字程序

单⽚机-4x4个矩阵按键控制数码管显⽰数字程序1 #include "8051.h"2 typedef unsigned char u8;3 typedef unsigned int u16;4 u8 smgduan[]= {5/*0 1 2 3 4 5 6 7 */60x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,7/*8 9 A B C D E F */80x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};910// P0⼝为数码管的位选的8位输⼊引脚11// P0 = 0x00;121314void Delayms(u16 ms);15void shumaguan(u8 n);16void DigDisplay();17void KeyTest();18void smg(u8 n, u8 m);19void key_4x4();2021void main()22 {23while(1)24 {25 key_4x4();26 }27 }2829// 不精确的延时函数30void Delayms(u16 ms)31 {32 unsigned int i, j;33for(i = ms; i > 0; i--)34for(j = 110; j > 0; j--);35return;36 }3738// 数码管根据74HC138译码器选择对应的段(选择哪个数码管显⽰)39void shumaguan(u8 n)40 {41switch(n)42 {43case0:44 LSA = 0;LSB = 0;LSC = 0;break;45case1:46 LSA = 1;LSB = 0;LSC = 0;break;47case2:48 LSA = 0;LSB = 1;LSC = 0;break;49case3:50 LSA = 1;LSB = 1;LSC = 0;break;51case4:52 LSA = 0;LSB = 0;LSC = 1;break;53case5:54 LSA = 1;LSB = 0;LSC = 1;break;55case6:56 LSA = 0;LSB = 1;LSC = 1;break;57case7:58 LSA = 1;LSB = 1;LSC = 1;break;59 }60 }6162// 数码管显⽰数字,并以⼗进制递增63void DigDisplay()64 {65 u8 i1 = 0;66 u8 i2 = 0;67 u8 i3 = 0;68 u8 i4 = 0;69 u8 i5 = 0;70 u8 i6 = 0;71 u8 i7 = 0;72 u8 i8 = 0;7374757677for (i8 = 0; i8 < 10; i8++)78for (i7 = 0; i7 < 10; i7++)79for (i6 = 0; i6 < 10; i7++)80for (i5 = 0; i5 < 10; i5++)81for (i4 = 0; i4 < 10; i4++)82for (i3 = 0; i3 < 10; i3++)83for (i2 = 0; i2 < 10; i2++)84for (i1 = 0; i1 < 10; i1++)85 {86 u16 cnt = 10;87while (cnt--)88 {89 shumaguan(0); //选中第⼀个数码管90 P0 = smgduan[i1]; //给他送⼀个数字91 Delayms(1); //稍微延时⼀下下92 shumaguan(1); //然后切换到第⼆个数码管。

单片机按键扫描数码管显示C语言程序

单片机按键扫描数码管显示C语言程序

单片机按键扫描数码管显示C语言程序按键扫描数码管显示程序共定义了6个键的功能:K1、K2、K3、K4以及K5、K8组成的一对复合键,其中K2,K3为连击键,K5为上档键。

在正常工作模式下按K1则切换至状态,在设定模式下按K1键循环选择4个数码管中的某个,被选中的数码管闪烁,此时单按K2键显示数值加1;常按K2显示数值以一定速度递增,同时数码管停止闪烁,当K2松开,数码管恢复闪烁,显示数值停留在K2松开前的值上。

K3完成的功能和K2类似。

其完成减操作。

这2个键只有在设定状态才有效,可以有效防止误操作。

K4为确认键,按下该键回到正常显示状态,所有指示灯熄灭,数码管显示刚刚设定的数值。

K5+K8这对复合键执行复位操作,任何情况下同时按下K5和K8或先按下K5再按下K8,所有数码管的显示全为0,指示灯全灭,进入正常显示状态。

同时程序还对如下几个异常操作进行了处理:1. 2个或多个功能键同时按下2. 一个功能键按下未释放,又按另一个功能键,然后再松开其中一个功能键3. 先按下功能键再按下上档键4. 多个上档键和一个功能键同时按下,此时不做处理。

等到松开其他上档键,只剩下一个上5. 档键和一个功能键时才执行这对复合键;或松开所有上档键,处理单一功能键。

/****************************************************************************** */#include <iom8v.h>#include <macros.h>#define uchar unsigned char#define uint unsigned int#define RCtrl 0x20 //定义上挡键第5键#define RConti 0xfe //定义连击键第6键#define N 2 //去抖年龄下限#define MaxRate 50 //重复前的延迟值 600ms#define MinRate 20 //重复速度 240ms#define leddark 83 //闪烁时灭时间1s#define ledshow 83 //闪烁时亮时间1s#define decimal 0x80 //小数点的段数#define KEY_DDR DDRC#define KEY_PORTO PORTC#define KEY_PORTI PINC#define OUT 0x3f#define IN 0xc0#define KeyValue 0x3f#define LEDD_DDR DDRB#define LEDD_PORTO PORTB#define LEDS_DDR DDRD#define LEDS_PORTO PORTD#define LEDS_MASK 0xfc#define LEDS_NUM 0x06#define TRUE 1#define FALSE 0/*定义键盘扫描程序返回数据类型*/typedef struct{uchar shiftcnt; //上档键的个数值uchar funcnt; //功能键的个数值uchar shiftval; //最后扫描到的上档键的值uchar funval; //最后扫描到的功能键的值} keyret;/*定义显示字符段码*/uchar const led_stroke[19] ={//0,1,2,3,4,5,6,7,8,90x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,//a,b,C,d,e,F,P,0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x73,//all on all off0xff, 0x00};/*定义位选码*/uchar const led_cs[LEDS_NUM] ={0xfb, //111110110xf7, //111101110xef, //111011110xdf, //110111110xbf, //101111110x7f //01111111};uchar led_buf[LEDS_NUM] ={0x73, 0x81, 0x82, 0x83, 0x84,0x85};uchar *pb = &led_buf[1]; //定义指向数码管数据缓冲区的指针/*定义全局变量*/uchar task, state; //task:按键状态,0:去抖 1,重复的延迟 2,重复//state:显示位置变量uchar keydone, keyprocess; //keydone: 按键任务完成标志,为1表示已完成//keyprocess: 按键有效标志,为1时表示对按键执行uchar keypre[2] ={0x00, 0x00}; //存放上次功能键和上档键的键值//keypre0存放功能键uchar blink, ledtime; //blink:闪烁控制寄存器,某位为1时闪烁//d7d6d5d4d3d2d1d0//xxxx1111//ledtime:累计闪烁时已点亮和已熄灭的时间uchar ledtask; //ledtask: 当前的闪烁状态,0代表亮uchar keymark; //keymark:只是当前工作状态,为1时处于设定状态,为0时正常工作uchar enflash; //enflash:闪烁使能标志,1闪烁#define shut_dis() LEDS_PORTO|=LEDS_MASK; //shut display/****************************************************************************** **函数原型: uchar _crol_(uchar data,uchar shiftbit);*功能:字节左移shiftbit*参数:*说明:****************************************************************************** */uchar _crol_(uchar data,uchar shiftbit){data &=0xff;if(shiftbit>8)return 0;return ((~data)<<shiftbit);}/****************************************************************************** **函数原型: uchar _cror_(uchar data,uchar shiftbit);*功能:字节右移shiftbit*参数:*说明:****************************************************************************** */uchar _cror_(uchar data,uchar shiftbit){data &=0xff;if(shiftbit>8)return 0;return ((~data)>>shiftbit);}/****************************************************************************** **函数原型: void send_shift(uchar d);*功能: 将显示数据由B口送出****************************************************************************** */void send_shift(uchar data){LEDD_PORTO = data;}/****************************************************************************** **函数原型: void lflash();*功能:闪烁处理。

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计

单片机和74HC595驱动芯片对数码管的控制设计1. 数码管显示设计本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。

74HC595部分电路图如下:与单片机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。

两片595采用级联方式,即U2的第9脚接到U3的第14引脚。

2. 74HC595简介74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。

其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输入脚-接单片机管脚;12:数据锁存时钟-接单片机管脚;11:数据输入时钟-接单片机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接高电平;9:数据级联输出-接下一片595的数据输入脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下面重点来了,通过时序图来编程。

看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:SCK是上升沿的时候要把数据写入;RCK是上升沿的时候数据才能锁存显示;有数据操作的过程中RESET必须是高电平;EN必须是低电平,595才能工作;知道了以上4点就可以写程序了。

其中3、4条是硬件连接上的事情(也可以用单片机的IO口来连接,这样的话可以随时控制74HC595的工作与否情况)。

写程序主要靠1、2条。

下面具体操作。

4. 程序实例看下面一段程序:第39行:HC595_CLK(0)的原型如下:HC595_CLK(0)是让CLK处于低电平,即上升沿还没有来到;HC595_DAT(1)就是要把写入的数据准备好;temp《《1是将数据移位,即一个字节分八次写入;HC595_CLK(1)是让CLK处于高电平,即上升沿来了;以上几句解释一下就是:在CLK时钟上升沿来临之前把要写入的数据准备好,等上升沿来了就把准备好的数据写入。

推荐-单片机的按键控制LED数码管共阴极动态显示电路设计报告 精品

推荐-单片机的按键控制LED数码管共阴极动态显示电路设计报告 精品

物理与电子工程学院《单片机原理与接口技术》课程设计报告书设计题目:基于单片机的按键控制LED数码管共阴极动态显示电路设计专业:自动化班级: 14级专接本1班学生姓名: 陈晓学号: 20XX0343116指导教师:成燕平20XX年6月14日物理与电子工程学院课程设计任务书专业:自动化班级: 1班随着计算机技术的发展,现代的计算机都是大规模集成电路计算机它们具有功能强、结构紧凑、系统可靠等特点,其发展趋势是巨型化、微型化、网络化及智能化。

微型化是计算机发展的重要方向,也就是把计算机的运算器、控制器、存储器、I/O接口四个组成部分集成在一个硅片内,于是就出现了一个以大规模集成电路为主要组成的微型计算机即单片机(Single Chip Microputer)。

正是由于单片机技术的发展,才能使LED七段数码管能够在减少驱动器的情况下能够直接被驱动。

单片机控制数码管显示的应用面积很广泛,实用性极强,而其的设计是基于嵌入式的控制器设计。

嵌入式应用涉及面较广,想要进入嵌入式应用系统的开发,就必须打好嵌入式应用设计与编程基础。

本课题是设计单片机最底层设置,通过实现本课题来培养自身嵌入式设计能力锻炼设计者设计一个完整项目的实际思路。

由于LED 数码管显示技术的优势使得它被广泛应用在工业过程控制系统、智能仪表,智能产品等领域。

本重点介绍了LED(light emission diode)数码管显示技术,并且编写了这种显示技术在单片机中实现的关键编码以及提供了参考原理简图。

关键词:LED技术;单片机;数码管1 引言在单片机应用系统中,显示器是一个不可缺少的人机交互设备之一,是单片机应用系统中最基本的输出装置。

通常需要用显示器显示运行状态以及中间结果等信息,便于人们观察和监视单片机系统的运行状况。

而单片机系统中最为常见的显示器是发光二极管数码显示器(简称LED显示器)。

LED显示器具有低成本、配置简单、安装方便和寿命长等特点。

键盘与数码管静态显示实验-单片机-程序

键盘与数码管静态显示实验-单片机-程序

键盘与数码管静态显示实验实验内容:1、根据电路图图1和图2编写按键程序,左侧第一位数码管显示独立式按键编号“1”、“2”、“3”、“4”,哪一个按下,对应的编号显示在左侧第一位数码管(左侧第二个数码管为全灭状态),右侧二位数码管显示“00--15”的十进制键值,无键按下时数码管为全灭状态。

图1 动态显示电路图图2 键盘接口电路图评分表unsigned char code led_code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09 ,0x11,0xc1,0x63,0x85,0x61,0x71,0xff}; unsigned char dis_buf[4];unsigned char i;unsigned char aa,bb,cc,lie;sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;sbit led_clk= P1^6 ;sbit led_data = P1^7 ;void delay_ms(unsigned int i){unsigned char j;for(i;i>0;i--){for(j=110;j>0; j-- );}}void key_scan(void){P3=0Xf0;if((P3&0xf0)!=0xf0){aa=0xfe;for(lie=0;lie<4;lie++){P3=aa;aa=(aa<<1)|0x01;if((P3&0xf0)!=0xf0){bb=P3&0Xf0;switch(bb){case 0xe0:cc=lie;break;case 0xd0:cc=lie+4;break;case 0xb0:cc=lie+8;break;case 0x70:cc=lie+12;break;default :cc=16;break;}}}}else cc=16;}void led_display ( ){unsigned char t,i;unsigned char input_code;for(i=0;i<4;i++){input_code=led_code[dis_buf[i]];for (t=0;t<8;t++){if( input_code & 0x01 ){led_data=1;}else{led_data=0;}led_clk=0;input_code>>=1;led_clk=1;}}}void main (){unsigned char num;while(1){key_scan();if(key1==0){delay_ms(10);if(key1==0){num=1;}}else if(key2==0){delay_ms(10);if(key2==0){num=2;}}else if(key3==0){delay_ms(10);if(key3==0){num=3;}}else if(key4==0){delay_ms(10);if(key4==0){num=4;}}else {num=16;}dis_buf[2]=16;dis_buf[3]=num;if(cc!=16){dis_buf[1]=cc/10;dis_buf[0]=cc%10;}else{dis_buf[1]=16;dis_buf[0]=16;}led_display ();delay_ms(300);}}[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]。

基于MCS51系列单片机实现键盘按键与数字动态显示计数器课程设计

基于MCS51系列单片机实现键盘按键与数字动态显示计数器课程设计

毕业设计论文摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

而51单片机是各单片机中最为典型和最有代表性的一种。

本实验是基于MCS51系列单片机所设计的,可以实现键盘按键与数字动态显示并可以用音乐倒数的计数器。

本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出时间,按下键就开始计时,并将时间显示在LCD1602显示器上。

当倒计数为0时,蜂鸣器就发出音乐声响等等。

该计数器系统主要由计数器模块、LCD显示器模块、蜂鸣器模块、键盘模块、复位模块等部分组成。

关键词:AT89C51、键盘、LCD1602显示、蜂鸣器目录摘要 (I)1 项目概述和要求 (1)1.1 单片机基础知识 (1)1.2 单片机的发展趋势 (1)1.3 项目设计任务与要求 (3)2 系统设计 (4)2.1 框图设计 (4)2.2部分硬件方案论述 (4)2.3电路原理图 (4)2.4元件清单 (5)2.4.1AT89C51芯片 (5)2.4.2字符型LCD1602 (6)2.4.3按键控制模块 (8)2.4.4其它元件 (8)3软件设计 (9)3.1 程序流程图 (9)3.2 程序关键问题的部分代码 (11)4 系统的仿真与调试 (16)4.1 硬件调试 (16)4.2 软件调试 (16)4.3 软硬件调试 (16)5总结 (17)参考文献 (18)1 项目概述和要求1.1 单片机基础知识单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲,一块芯片就成了一台计算机。

单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

单片机课程设计--键盘输入在LED数码管上的显示

单片机课程设计--键盘输入在LED数码管上的显示

东北石油大学课程设计年月日东北石油大学课程设计任务书课程单片机的控制系统课程设计题目键盘输入在LED数码管上的显示专业姓名学号主要内容、基本要求、主要参考资料等主要内容:完成键盘输入在LED数码管上的显示。

基本要求:1.了解 4×4 键盘的工作原理。

2.熟悉 SPCE061A 单片机控制数码管显示的方法。

3.掌握 4×4 键盘的使用方法。

4.掌握 4×4 键盘控制数码管显示的方法。

参考资料:[1]肖洪兵.跟我学用单片机[J].北京:北京航空航天大学出版社,2002.8[2]何立民.单片机高级教程第1版[M].北京:北京航空航天大学出版社,2001.6[3]赵晓安.MCS-51单片机原理及应用[M].天津:天津大学出版社,2001.3[4]李广第.单片机基础第1版[M].北京:北京航空航天大学出版社,1999.5[5]徐惠民.单片微型计算机原理与应用[M].北京:北京邮电大学出版社,1996.2[6] 袁勤勇.嵌入式系统构件[M].北京:北京机械工业出版社,2002.完成期限指导教师专业负责人年月日目录第1章设计的研究背景及目的要求 (1)1.1 研究背景 (1)1.2 设计目的 (1)1.3 硬件选择 (1)1.4 设计内容 (1)第2章设计的基本原理及硬件连接方案 (2)2.1 4X4键盘扫描原理图 (2)2.2 SPCE061A获取4×4键盘键值原理 (2)2.3 硬件连接 (3)第3章软件设计方案 (5)3.1 设计步骤 (5)3.2 设计程序 (6)第4章调试结果与分析 (7)4.1 调试结果 (7)4.2 结果分析 (7)结论与体会 (8)参考文献 (9)附录 (10)第1章设计的研究背景及目的要求1.1 研究背景用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。

静态显示数据稳定,占用很少的CPU时间。

51单片机键盘数码管显示(带程序)说课材料

51单片机键盘数码管显示(带程序)说课材料

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。

具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。

其各口功能可由软件选择,使用灵活,通用性强。

8255可作为单片机与多种外设连接时的中间接口电路。

8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。

同时必须具有与外设连接的接口A、B、C口。

由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。

8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。

2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。

它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。

A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。

RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。

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

主讲人:尹延辉
版权:力天电子

输入状态IO寄存器设置
输入状态IO寄存器设置

V C
DDRx某一位置0,相应位的IO口被设置为输入 PORTx某一位置1,使能对应IO口相应位的上拉电阻 PINx的对应位是输入的数据,0或1
C
1
0
0
k
~
2
0
0
R
?
k
InPut
主讲人:尹延辉
AVR单片机软硬件设计教程-入门篇
——学单片机就要学AVR!
主 讲: 尹延辉 策 划:张 勇
学习板:LT-Mini-M16
力天电子版权所有 技术交流QQ群:31646346 2008年 9月
第五讲
按键与数码管的程序设计
本讲内容:
AVR IO口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管
switch语句结构 switch(表达式) {case 常量1:表达式1 case常量2:表达式2 … default:表达式n}
版权:力天电子
主讲人:尹延辉

按键的查询方式程序设计
PIND & (1 << 6) 1 << 6 :
1左移6位,即:0b01000000 将除第6位之外其他位清零 第6位保持输入的值
版权:力天电子

InPut
选择结构语句
关系运算符和关系表达式
小于<小于或等于<=大于>大于或等于>=等于==不等于!= 逻辑与&&逻辑或||逻辑非!
逻辑运算符和逻辑表达式 if语句结构
if(表达式1) 语句1 else if(表达式2) 语句2 else 语句3
PIND & (1 << 6)
与选择结构语句的结合
判断PIND & (1 << 6)的值,执行相应代码
主讲人:尹延辉
版权:力天电子

八段数码管
G N
八段数码管
由八段LED构成 各LED阴极或阳极并在一起,称为“位选线”:共阴、共 阳 其余8个引脚各自引出,称为“段选线”,各段可以分别控 制
1 0 a A 1 9 6 b 8 c A来自aLE
b
L
E

c
L
E
d
L
E
e
L
E
5
4
e
d
f
L
E
2
3
g
f
g
L
E
7
D
D
P
P
L
E
主讲人:尹延辉
版权:力天电子

D
D
D
D
D
D
D
D
D
多位合一的数码管
多位合一的数码管
将多个八段数码管的段选线分别并在一起,位选线引出
主讲人:尹延辉
版权:力天电子

数码管扫描原理
数码管扫描原理
多位数码管的各个位均可以单独显示不同的数据,但一个时刻只 能点亮一位 依次点亮多位数码管中的各个位,由于人眼的视觉暂留效应,看 起是来多位同时点亮 请观看程序演示
主讲人:尹延辉
版权:力天电子

相关文档
最新文档