单片机11 独立按键控制单个数码管

合集下载

独立式键盘与LED数码管显示器与单片机控制相关_OK

独立式键盘与LED数码管显示器与单片机控制相关_OK

JB 20H.0 KEYAA;是KEYA键,转KEYAA执行
JB 20H.1 KEYBB;是KEYB键,转KEYBB执行
16
JB 20H.2 KEYCC;是KEYC键,转KEYCC执行
LCALL DIR;
LJMP LOOP; 重复执行
KEYAA:……;
KEYA键功能程序
LJMP LOOP;
KEYBB:……;
KEYB键功能程序
LJMP LOOP;
KEYCC:……;
KEYC键功能程序
LJMP LOOP;
KEYDD:……;
KEYD键功能程序
LJMP LOOP;
END
17
ORG 0000H MAIN:MOV SP, #60H;堆栈初始化 LOOP:LCALL DIR; 调显示子程序
LCALL KEY; 调键扫描子程序 MOV A, 20H; 键值送A KEY0:CJNE A, #01H, KEY1;不是KEYA键,转KEY1 LJMP KEYAA; 是KEYA键,转KEYAA执行 KEY1:CJNE A, #02H, KEY2;不是KEYB键,转KEY2 LJMP KEYBB; 是KEYB键,转KEYBB执行 KEY2:CJNE A, #04H, KEY3;不是KEYC键,转KEY3 LJMP KEYCC; 是KEYC键,转KEYCC执行 KEY3:CJNE A, #08H, KEY4;不是KEYD键,转KEY148 LJMP KEYDD; 是KEYD键,转KEYDD执行
f
e
d
c
b
a
用LED显示器显示十六进制数字形代码如表所示:
23
显字
共阳极
示型

d g f e d c b a 字型

任务228按键控制单数码管

任务228按键控制单数码管
处理过程
(二)独立键盘电路的编程方法
1.首先单片机要知道是不是有按键按下,注意为消除抖动的 影响要判断两次,第一次判断按下键后,要延时10ms再进判 断,如果还是有按键按下,此时才能真正确定按键按下了
2.判断出确实有按键按下后,再判断是不是只有1个按键按下, 当然,如果确信在实际应用时不会出现多个按键同时按下的 情况,这个步骤也可以不要
硬 件 电 路
2、软件分析
开始
N
按键按下没有
Y
延时10ms,去抖动影响
Y
N 按键按下没有
Y
N
是否只按下一个键?
Y
确定那个按键按下,得到 键盘码
根据键盘码,运用查表指令,向七段数码管 送出相应的字型码
软件分析
软件分析
软件分析
五.任务实施
❖ 1、在PROTEUS软件中按图搭接好电路; ❖ 2、在伟福软件中编辑程序,进行编译,得到.HEX格式文
件; ❖ 3、将所得的HEX格式文件在PROTEUS中指定到MCU芯片中; ❖ 4、运行仿真,观察仿真结果; ❖ 5、PROTEUS中结果正常后,用实际硬件搭接并调试电路,
通过编程器将.HEX格式文件下载到AT89C51中,通电验证 实验结果。
六、任务总结
❖ 任务回顾 ❖ 课后作业 ❖ 思考题
Thቤተ መጻሕፍቲ ባይዱnk you!
任务22 8按键控制单数码管
6学时
一.任务目标
1.掌握独立按键接口电路的应用 2.巩固单片机数码管显示的应用
二.任务要求
任务描述: 有8个按键(K0-K7),当按下K0 时,数码管显示0,按下K1时,数码管显示 1,按下K7键时,数码显示7,如果同时有2 个或2个以上的按键按下,则数码管不理会, 保持原显示状态。

《控制1位数码管显示》说课课件

《控制1位数码管显示》说课课件

项目提高 作业布置
根据要求
查阅资料
制定出实施方案
小组讨论 教师参与纠正
教学过程 训练准备
引入任务
合作探究
动手实践
成果汇报 考核评价
项目提高 作业布置
实施方案
教学过程 训练准备
引入任务
合作探究
动手实践
成果汇报 考核评价
项目提高 作业布置
上机进行仿真
利用Protues软 件绘制电路图
编写程序调试
1、利用Keil C软 件编写汇编语言 程序
教学过程 训练准备
引入任务
合作探究
动手实践
成果汇报 考核评价
项目提高 作业布置
1、选取元件、工具 2、填写元件清单
并检测元件 3、装配电路
4、检测电路
5、编程调试
序 元器件类型 号
1 2 3 4 5 6 7 8 9 10
规格 数 检测是 型号 量 否良好
教学过程 训练准备
引入任务
合作探究
动手实践
2、作业(启示后续内容) 提问:只显示一位数码管很难满足我们现实的需要 ,如何控制多位(4位)数码管显示?
教学过程 训练准备
引入任务
合作探究
动手实践
成果汇报 考核评价
项目提高 作业布置
请同学们带着提示回去预习下一项目内容。 (提示:4位数码管动态扫描显示,很重要的特点是每 一位数码管配了一个充当开关作用的三极管,而且每位数 码管的段选是连在一起)
教学过程 训练准备
引入任务
合作探究
动手实践
成果汇报 考核评价
项目提高 作业布置
自评
互评
总评
优秀团队
最高品质
依据行业标准评价:调动学生积极性,使学生明确自己的努

利用按键操作数码管显示

利用按键操作数码管显示

利用按键操作数码管显示数码管是一种常见的显示设备,它由许多小型LED灯组成,可以通过按键操作实现不同数字的显示。

下面是一个利用按键操作数码管显示数字的示例程序:```c#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_LEDBackpack.h>#define BUTTON_PIN 2Adafruit_7segment display = Adafruit_7segment(;void setupinMode(BUTTON_PIN, INPUT_PULLUP);display.begin(0x70);display.setBrightness(15);void loostatic int number = 0;static int prevButtonState = HIGH;int buttonState = digitalRead(BUTTON_PIN);if (buttonState != prevButtonState && buttonState == LOW)number++;if (number > 9)number = 0;}display.writeDigitNum(0, number, false);display.writeDisplay(;}prevButtonState = buttonState;```这个程序使用`Adafruit_7segment`库来控制数码管显示。

首先,需要在Arduino IDE中安装`Adafruit_GFX`和`Adafruit_LEDBackpack`库。

然后,将数码管的SDA引脚连接到Arduino的A4引脚,SCL引脚连接到A5引脚,还需要将按键连接到2号引脚。

在程序的`setup(`函数中,初始化数码管显示,并设置亮度为最大。

单片机11 独立按键控制单个数码管

单片机11  独立按键控制单个数码管

uchar num;
void main()
{
EA=1; //允许全局中断
EX0=1; //允许外部中断0
ቤተ መጻሕፍቲ ባይዱ
while(1)
{
if(key==1)
EX0=1; //当按键松开时,允许外部中断0,等待按键下一次按下。
P2=shu[num];
}
} void int0()interrupt 0//外部中断0设置程序{
num++;
if(num>9)
num=0;
EX0=0;
}
(1)独立式按键连接P3.2引脚,当按键按 下时,单片机响应外部中断0。
(2)数码管对按下按键进行计数,当次数 达到10时,则自动清0。
程序编写及讲解
#include"reg52.h"
#define uchar unsigned char
sbit key=P3^2;
uchar code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
独立按键控制单个数码管
独立按键控制单个数码管
任务单 原理图绘制 程序编写及讲解 总结
任务单
任务
通过本任务的学习,学会使用独立按键控制单
描述 个数码管
任务 1、用P3.2口接独立按键和P2口接数码管
要求
利用Proteus仿真运行,使用独立按键控制单个 实现 数码管的计数显示
方法
独立按键控制单个数码管的显示

单片机数码管控制方式

单片机数码管控制方式

单片机数码管控制方式数码管是一种常见的输出设备,用于显示数字和字母等字符。

在单片机应用中,通过控制数码管的亮灭状态,可以实现各种显示效果,如计时器、温度显示等。

本文将介绍几种常见的单片机数码管控制方式。

一、静态显示方式静态显示方式是最简单的数码管控制方式之一。

它通过直接控制数码管的每一位,使其显示相应的数字或字符。

静态显示方式的特点是显示稳定,但需要占用较多的IO口资源。

在静态显示方式中,单片机通过控制每一位数码管的引脚,使其亮起或熄灭。

具体的控制流程如下:1. 设置引脚的工作模式为输出模式;2. 通过逐位设置引脚的电平,使对应的数码管亮起或熄灭;3. 根据需要的显示效果,不断循环执行步骤2。

二、动态扫描方式动态扫描方式是一种常见的数码管控制方式。

它通过快速切换数码管的亮灭状态,使人眼产生视觉暂留效果,从而实现数字或字符的显示。

动态扫描方式的特点是节省IO口资源,但需要较高的刷新频率。

在动态扫描方式中,单片机通过依次设置每一位数码管的引脚为高电平,其他位的引脚为低电平,从而实现数码管的动态显示。

具体的控制流程如下:1. 设置引脚的工作模式为输出模式;2. 依次将每一位数码管的引脚设置为高电平,其他位的引脚设置为低电平;3. 等待一段时间,使人眼产生视觉暂留效果;4. 根据需要的显示效果,不断循环执行步骤2和步骤3。

三、面阵扫描方式面阵扫描方式是一种高级的数码管控制方式。

它通过将多个数码管组成一个矩阵,通过行列扫描的方式实现数字或字符的显示。

面阵扫描方式的特点是可以显示更多的内容,但需要较高的计算和刷新速度。

在面阵扫描方式中,单片机通过设置行和列的引脚状态,控制数码管的亮灭。

具体的控制流程如下:1. 设置引脚的工作模式为输出模式;2. 依次设置每一行的引脚为低电平,其他行的引脚为高电平;3. 依次设置每一列的引脚为高电平或低电平,控制数码管的亮灭;4. 等待一段时间,使人眼产生视觉暂留效果;5. 根据需要的显示效果,不断循环执行步骤2、步骤3和步骤4。

基于单片机的键盘和LED数码管工作原理

基于单片机的键盘和LED数码管工作原理

基于单片机的键盘和LED数码管工作原理单片机是一种集成电路芯片,它包含了中央处理器、存储器和各种输入输出接口等核心功能。

而键盘和LED数码管则是单片机中常用的输入和输出设备之一键盘通常由多个按键组成,每个按键对应一个电路开关。

当按键按下时,电路闭合,形成通路,使电流流过。

按键抬起时,电路断开,通路被切断。

在单片机的键盘应用中,常用的键盘有矩阵键盘和独立按键两种。

矩阵键盘是将多个按键排列成矩阵的形式,通过行和列两个方向上的电极连接到单片机的输入输出引脚上。

当一些按键按下时,对应的行和列的电极会形成电路,单片机通过扫描行和列的方式,来检测按键的状态。

具体的工作原理如下:1.单片机通过输出行电平信号,将每行的引脚设置为输出模式,并将行的电平拉低;2.单片机通过输入列电平信号,将每列的引脚设置为输入模式,并开启输入状态;3.单片机依次扫描每行,检测是否有按键按下;4.如果有按键按下,则表示该行对应的列电平会被单片机检测到;5.单片机根据行和列的组合,确定按下的按键。

独立按键则是将每个按键对应的引脚直接连接到单片机的输入引脚上,按键按下时,直接检测到引脚的电平信号。

LED数码管是一种显示设备,它由多个LED组成,可以用于显示数字、字母和符号等信息。

在单片机的LED数码管应用中,常见的数码管有共阳和共阴两种类型,在工作时,需要通过单片机的输出引脚来控制数码管的亮灭。

共阳数码管的工作原理如下:1.单片机通过输出引脚产生一个高电平信号,与数码管的相应位相连接;2.当输出引脚电平为高时,该位的LED被通电,发出光亮;3.当输出引脚电平为低时,该位的LED断电,熄灭。

共阴数码管的工作原理与共阳相反:1.单片机通过输出引脚产生一个低电平信号,与数码管的相应位相连接;2.当输出引脚电平为低时,该位的LED被通电,发出光亮;3.当输出引脚电平为高时,该位的LED断电,熄灭。

通常,为了达到流水灯效果或同时显示多位数字,需要使用多个输出引脚来控制多个LED数码管。

单个数码管控制

单个数码管控制

第八节单个数码管控制一、编写程序步骤一:打开bascom-avr编程环境;步骤二:新建空白编程文件;步骤三:设置系统频率,系统的波特率步骤四:输入程序程序举例:将下面程序在bascom-avr中编译及仿真'——————————————————————————————————'名称: 单个数码管控制程序'目的: 通过此程序,练习bascom-avr与实验板的使用,了解I/0口及数码管。

'目标芯片: Mega16'作者: 张恩锋'编译环境: BASCOM-A VR 1.11.8.4'protues 7仿真通过'———————————————————————————————————$regfile = "m16def.dat" ' 单片机型号$crystal = 8000000 ' 定义晶振频率Config Porta = Output '定义A口为输出口Do '循环DO__LOOP Porta = &B00000001 '让A口的输出,LoopEnd '————————————————————————————————————步骤五:保存程序步骤六:编译文件如下图所示:在菜单栏中单击“compile program”或按F7键编译文件,若提示错误请认真检查并及时更正错误。

二、仿真模拟在桌面中打开protues仿真软件2.1 添加元件点击新建文件单击“P”从库中选取元件在关键字中输入“7seg-com-cat-grn”添加一个共阴级数码管选择结果中的元件并双击。

同样的方法在关键字中输入“atmega16”添加A VR单片机单击“确定”退出添加元件界面。

单击添加的元件,在编辑界面鼠标会变成笔状。

在编辑界面单击鼠标,会出现器件的外形,选择好器件所放位置并单击鼠标就可放置元件单击鼠标后若是有特殊需要,可以在单片机元件图中点击鼠标右键把单片机进行旋转,如下图:同样的方法放置数码管。

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

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

按键控制数码管和流水灯设计报告实验报告实验名称:按键控制数码管和流水灯设计报告一、实验目的本实验旨在通过使用按键来控制数码管和流水灯的显示,加深对数码管和流水灯工作原理的理解,并掌握按键的基本输入输出原理。

二、实验器材1. Arduino开发板2.数码管模块3.面包板4.面包板连接线5.按键模块6.跳线三、实验原理数码管是一种将数字和一些常用符号通过数码电路显示在特定位置的显示器件,由多个LED组成,可显示0-9及一些小于9的字母和符号。

流水灯是一种LED灯的组合,通过不同的时序控制,实现灯光依次点亮或熄灭的效果。

本实验通过使用按键控制器将数码管和流水灯的状态控制与显示,按下不同的按键可以使数码管切换显示不同的数字,同时控制流水灯的点亮或熄灭。

四、实验步骤1. 将数码管模块连接到Arduino开发板的数字I/O口,连接方式可参考数码管模块的接口定义和Arduino开发板的编号。

2. 将按键模块连接到Arduino开发板的数字I/O口,连接方式可参考按键模块的接口定义和Arduino开发板的编号。

3. 按键模块和数码管模块都需要使用面包板连接线和跳线连接到Arduino开发板的相应引脚上。

4.根据按键的读取状态,通过编程控制数码管显示相应的数字,利用流水灯实现通过按键的控制点亮或熄灭。

五、实验结果经过编程和调试,实验中数码管能够正确显示按键输入的数字,同时根据按键输入状态控制流水灯的点亮或熄灭。

按不同的按键可以切换数码管的数字显示,实现了按键对数码管和流水灯的控制。

六、实验总结本实验通过按键来控制数码管和流水灯的显示,加深了对数码管和流水灯的工作原理的理解。

同时,掌握了按键的基本输入输出原理,并通过编程控制实现了按键对数码管和流水灯的控制。

本实验还有一些可以改进的地方,例如可以增加多个按键,实现更多的控制功能;还可以通过增加延时函数控制流水灯的点亮或熄灭速度。

通过不断改进和练习,可以提高对Arduino开发板的理解和掌握。

51单片机:独立按键与矩阵按键控制数码管

51单片机:独立按键与矩阵按键控制数码管

51单⽚机:独⽴按键与矩阵按键控制数码管⼀,独⽴按键注意⼀下⼏点>按下的时候,电压被拉低,所以IO⼝要传低电平( 0x0 )>按下的时候要消除抖动 ( 延时10ms ),在判断,是否还是低电平,再做业务处理下⾯这段程序,就是通过⼀个独⽴按键连接到p1⼝,控制静态数码管的⼀段进⾏亮和灭的切换。

#include <reg52.h>sbit key_control = P1^0;sbit led = P0^0;typedef unsigned char u8;typedef unsigned int u16;void delay( u16 i ){while( i-- );}void key_press(){if( key_control == 0x0 ) {delay( 1110 );if( key_control == 0x0 ){led = ~led;}while( !key_control );}}void main (){/*while( 1 ){if( key_control == 0x0 ) {delay( 1110 ); //⼤概10msif ( key_control == 0x0 ) {led = 1;}}else if( key_control == 0x1 ) {delay( 1110 );if ( key_control == 0x1 ) {led = 0;}}}*/led = 0;while( 1 ) {key_press();}}⼆,当按键⽐较多的时候,⽤矩阵按钮,因为如果不⽤矩阵按钮,⼀个独⽴按键需要⼀个IO⼝,浪费资源。

如: 16个独⽴按键需要16个io⼝,⽽16个矩阵按键(4x4,⼀共8个管脚)需要8个IO⼝下⾯的程序,通过16个矩阵按钮,控制静态数码管,显⽰0~F#include <reg52.h>#define GPIO_DIG P0 //段选数码管#define GPIO_KEY P1 //矩阵按键typedef unsigned char u8;typedef unsigned int u16;void delay( u16 i ){while( i-- );}u8 key_value;//静态数码管段码u8 character [16] = { 0xC0, 0xF9 , 0xA4 , 0xB0 , 0x99 , 0x92,0x82 , 0xF8 , 0x80 , 0x90 , 0x88 , 0x83,0xC6 , 0xA1 , 0x86 , 0x8E};void key_down(){u8 count = 0;//⾏列扫描判断哪个键被按下GPIO_KEY = 0x0F; //⾼四位全部输出低电平,低四位输出⾼电平-->判断被按下的按钮所在的列if( GPIO_KEY != 0x0F ) { //有按键按下delay( 1110 ); //消除抖动if( GPIO_KEY != 0x0F ){switch( GPIO_KEY ){case0x07:key_value = 0; //矩阵第1列的按钮被按下break;case0x0B:key_value = 1; //矩阵第2列的按钮被按下break;case0x0D:key_value = 2; //矩阵第3列的按钮被按下break;case0x0E:key_value = 3; //矩阵第4列的按钮被按下break;}GPIO_KEY = 0xF0; //⾼四位输出⾼电平,低四位输出低电平-->判断被按下的按钮所在的⾏switch( GPIO_KEY ){case0x70:key_value = key_value; //矩阵第1⾏的按钮被按下break;case0xB0:key_value = key_value + 4; //矩阵第2⾏的按钮被按下break;case0xD0:key_value = key_value + 8; //矩阵第3⾏的按钮被按下break;case0xE0:key_value = key_value + 12; //矩阵第4⾏的按钮被按下break;}GPIO_DIG = character[key_value];//如果⼀直按下按键,等待500ms,强制退出while( ( count < 50 ) && ( GPIO_KEY != 0xF0 ) ) {count++;}}}}void main (){while( 1 ) {key_down();}}。

单片机C编经典例程(独立、矩阵按键,动、静数码管显示)

单片机C编经典例程(独立、矩阵按键,动、静数码管显示)

独立键盘/****************************************************************************** * 按键控制程序* 连接方法:JP10(P2)与JP1 (LED灯)连接,* JP11(P0)与JP5(按键接口)连接* * 开始点亮P1LED* 按P01 LED向右移一位* * 按P00 LED向左移一位* 连续按动按钮LED会不停的左移或右移******************************************************************************** /#include <reg51.h>#include <intrins.h>unsigned char scan_key();void proc_key(unsigned char key_v);void delayms(unsigned char ms);sbit K1 = P0^0; //对应按钮K1sbit K2 = P0^1; //对应按钮K2main(){unsigned char key_s,key_v;key_v = 0x03;P2 = 0xfe;while(1){key_s = scan_key();if(key_s != key_v){delayms(10);key_s = scan_key();if(key_s != key_v){key_v = key_s;proc_key(key_v);}}}}unsigned char scan_key(){unsigned char key_s;key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return key_s;}void proc_key(unsigned char key_v){if((key_v & 0x01) == 0){P2 = _crol_(P2,1);}else if((key_v & 0x02) == 0){P2 = _cror_(P2, 1);}}void delayms(unsigned char ms) // 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}矩阵键盘******************************************************************************* *描述: * * 矩阵键盘数码管显示键值** 排线连接方法:JP8(P1)与JP4(矩阵键盘接口)连接P0与JP3(静态数码管)连接* * 矩阵键盘定义:** P1.1-P1.4为列线,P1.4-P1.7为行线* * 喇叭接P1.5口矩阵键盘P1口,* * 注意:请将JP165短路冒断开* ******************************************************************************* #include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar dis_buf; //显示缓存uchar temp;uchar key; //键顺序吗void delay0(uchar x); //x*0.14MS#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};// 此表为LED 的字模unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5 E,~0x79,~0x71};/*************************************************************//* *//* 延时子程序*//* *//*************************************************************/void delay(uchar x){ uchar j;while((x--)!=0){ for(j=0;j<125;j++){;}}}/*************************************************************//* /* 键扫描子程序(4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行*//* P1.1 P1.2 P1.3为列*/*************************************************************/void keyscan(void){ temp = 0;P1=0xF0; //高四位输入行为高电平列为低电平delay(1);temp=P1; //读P1口temp=temp&0xF0; //屏蔽低四位temp=~((temp>>4)|0xF0);if(temp==1) // p1.4 被拉低key=0;else if(temp==2) // p1.5 被拉低key=1;else if(temp==4) // p1.6 被拉低key=2;else if(temp==8) // p1.7 被拉低key=3;elsekey=16;P1=0x0F; //低四位输入列为高电平行为低电平delay(1);temp=P1; //读P1口temp=temp&0x0F;temp=~(temp|0xF0);if(temp==2) // p1.1 被拉低key=key+0;else if(temp==4) // p1.2 被拉低key=key+4;else if(temp==8) // p1.3 被拉低key=key+8;elsekey=16;dis_buf = key; //键值入显示缓存dis_buf = dis_buf & 0x0f;}/*************************************************************//* *//*判断键是否按下*//* *//*************************************************************/void keydown(void){P1=0xF0;if(P1!=0xF0) //判断按键是否按下如果按钮按下会拉低P1其中的一个端口{keyscan(); //调用按键扫描程序}}/*************************************************************//* *//* 主程序*//* *//*************************************************************/main(){P0=0xFF; //置P0口P1=0xFF; //置P1口delay(10); //延时while(1){keydown(); //调用按键判断检测程序P0 = LED7Code[dis_buf%16]&0x7f; //LED7 0x7f为小数点共阴和共阳此处也是不一样; %16表示输出16进制}}/************************************************************/标题: 试验数码管上如何显示数字(共阳极) * 连接方法:P0 与JP3 用8PIN排线连接*请学员认真消化本例程,用单片机脚直接控制数码管* #include <reg51.h>#include <intrins.h>#define NOP() _nop_() /* 定义空指令*/void delay(unsigned int i); //函数声名// 此表为LED 的字模unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5 E,~0x79,~0x71};main(){unsigned int LedNumVal=1 ,C ; //定义变量while(1){if (++C>= 300){ LedNumVal++ ; //每隔300个扫描周期加一次C =0; //每隔300个扫描清零}// 将字模送到P0口显示P0 = LED7Code[LedNumVal%10]&0x7f; //LED7 0x7f为小数点共阴和共阳此处也是不一样;delay(150); //调用延时程序}}/****************************************************************** ** 延时程序** ******************************************************************/void delay(unsigned int i){char j;for(i; i > 0; i--)for(j = 200; j > 0; j--);}*******************************************************************************标题: 试验数码管上显示数字( 单片机直接实现位选共阴极) * * 连接方法:P0与J12 用8PIN排线连接P1与JP16 用排线连接***************************************************************************** 请学员认真消化本例程,用573锁存器控制和单片机脚直接位选控制(非译码器控制)数码管******************************************************************************** #include <reg51.h>#include <intrins.h>void delay(unsigned int i); //函数声名char DelayCNT;//定义变量//此表为LED 的字模, 共阴数码管0-9 -unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制//此表为8个数码管位选控制, 共阴数码管1-8个-unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制查表的方法控制/************主函数**********************/main(){unsigned int i,LedNumVal=1 ; //变量定义unsigned int LedOut[10]; //变量定义DelayCNT=0;while(1){if(++DelayCNT>=20) //控制数字变化速度{DelayCNT=0; //20个扫描周期清零一次++LedNumVal; //每隔20个扫描周期加一次}LedOut[0]=Disp_Tab[LedNumVal%10000/1000];LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;LedOut[2]=Disp_Tab[LedNumVal%100/10];LedOut[3]=Disp_Tab[LedNumVal%10];LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位LedOut[7]=Disp_Tab[LedNumVal%10]; //个位for( i=0; i<9; i++){P0 = LedOut[i];P1 = dispbit[i]; //使用查表法进行位选/* switch(i) //使用switch 语句控制位选{case 0:P1 = 0x7F; break;case 1:P1 = 0xbF; break;case 2:P1 = 0xdF; break;case 3:P1 = 0xeF; break;case 4:P1 = 0xf7; break;case 5:P1 = 0xfb; break;case 6:P1 = 0xfd; break;case 7:P1 = 0xfe; break;} */delay(150); //扫描间隔时间太长会数码管会有闪烁感}}}void delay(unsigned int i){char j;for(i; i > 0; i--)for(j = 200; j > 0; j--);}。

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

单片机原理及应用课程教案
课题独立按键控制单个数码管授课人葛和平
课程类型一体化课程范围及性质普通(校级、市级公开课)班级15楼宇班课时2课时
上课时间2016-2017学年第二学期上课地点4A-512
教学目标知识与技能:具备基础的单片机知识,能够读懂电路原理图过程与方法:培养学生查询资料的能力和团结协作的意识情感态度价值观:培养学生分析问题、解决问题的能力
重点能够读懂电路原理图,理解程序含义及步骤
难点能够根据简单要求学会修改程序,达到教师要求学情分析学生思维灵活,课堂气氛活跃,喜欢动手操作
教学方法一体化教学,着重实操教学
教学准备根据教学要求做好PPT和演示程序,深入讲解程序
教学过程与内容设计意图
教学方法
时间
(一)复习引入
复习按键的工作原理
(二)新课内容
1、电路原理图设计
通过引入
现实生活
中的实例,
引入电路
10


20。

相关文档
最新文档