第一篇:实验五___七段数码管动态显示实验_xs
实验五 七段数码管动态显示实验
一、实验目的
掌握数码管动态显示数字的原理
二、实验内容
动态显示:按图5-2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。编程在十位和个位两个数码管上显示“56”。
三、编程提示
实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
. 看清实验目的和要求 2. 注意实验步骤
3. 连接实验线路时请注意开关的位置
4. 根据原理框图编写程序,保存为学号名+SY2 例:1928101sy5 5. 记录下实验中遇到的问题,实验的实际意义
6. 准备实验报告的数据
如何解决的,搞懂
实验六 竞赛抢答器
一、实验目的
1、了解微机化竞赛抢答器的基本原理。
2、进一步学习使用并行接口。
二、实验内容
图7-1为竞赛抢答器(模拟)的原理图,逻辑开关K0~K7代表竞赛抢答按钮0~7号,当某个逻辑电平开关置“1”时,相当某组抢答按钮按下。在七段数码管上将其组号(0~7)显示出来,并使微机扬声器响一下。
三、编程提示
设置8255为C口输入、A口输出,读取C口数据,若为0表示无人抢答,若不为0则有人抢答。根据读取数据可判断其组号。从键盘上按空格键开始下一轮抢答,按其它键程序退出。
附加试验: 可编程定时器/计数器(8253)
一、实验目的: 掌握8253的基本工作原理和编程方法。
二、实验内容
按图3-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。用示波器观察OUT0,OUT1输出电平的变化和波形。同时用七段数码管段码显示出来
三、编程提示 8253控制寄存器地址283H 计数器0地址280H 计数器1地址281H CLK0连接时钟 1MHZ
请各位同学在上机实验前编好程序,要检查!
实验时间
周四
计科83班:8:00-9:30 网工 82:9:40-11:10 网工 81:12:30-14:00 计科81班:14:00-15:30 计科82班:15:30-17:00 实验地点:教学楼B610 1.到5楼计算中心值班室请值班老师开门 2.这周日上午为自由实验时间,愿意去的同学请先向各班长或课代表报名
第二篇:单片机实验五 按键及七段数码管实验
实验五 按键及七段数码管实验
一、实验目的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、思考计算器程序如何实现;
第三篇:虚拟实验在LED数码管多位动态显示教学中的应用
虚拟实验在LED数码管多位动态显示教学中的应用
作者简介作者简介:蒋宏伟(1967-),男,江苏省昆山第二中等专业学校高级教师,研究方向为计算机程序设计、单片机应用。1LED数码管多位动态显示教学难点
LED数码管是单片机控制系统中最常见的显示设备之一,它具有亮度高、价格低、寿命长、对电流和电压要求低、与单片机连接方便等诸多优点。但是LED数码管又是占用单片机端口资源的“大户”。为了克服LED数码管这个致命的缺点,在实际应用时会想很多办法,数码管多位动态显示便是其中巧妙的方法之一。同时还可以运用各种I/O端口扩展的方法,让数码管多位动态显示以更加节省资源。但是正因为这个“动态”,给其原理的理解增加了许多难度,如果再和各种端口扩展结合在一起,就让学生更难以理解。多位数码管动态显示与各种端口扩展结合在一起,注定了硬件结构的千变万化。如果在教学中不注重让学生理解本质原理,而是针对某一固定的硬件背几段程序,这种教学极不利于学生今后的工作。因此,必须通过合理的教学设计,特别是运用信息技术手段突破教学难点,让学生真正地掌握基本原理,并适应工作中的各种变化。
2虚拟实验对传统实验的突破
2.1实验在单片机教学中的地位
“单片机原理及应用”是一门理论性和实践性都很强的课程。戴尔的“经验之塔”理论指出,最底层的经验即做的经验是最直接最具体的经验,越往上升越抽象。教育应从具体经验入手,逐步过渡到抽象经验,有效的教学方法,应首先给学生丰富的具体经验。单片机课程实验可以让学生获得丰富的直接体验,是学习单片机课程的重要内容。
2.2单片机课程传统实验教学方式的弊端
实际教学中,传统的实验方法存在许多问题。首先,因实验设备数量有限,教学中只能分组进行实验,组内成员间相互依赖性较强,不利于培养全体学生的动手能力、创新能力和综合运用知识的能力;其次,实验只能在实验室中进行;往往是以教师为中心,学生在规定的时间内,用统一的模式,按照指导书上规定的步骤做相同的验证式实验,而在课前预习和课后作业阶段一般也只能“纸上谈兵”,这不利于激发学生的学习兴趣和主观能动性;最重要的是传统的实验箱硬件结构固定,使得教师很难根据教学要求由浅入深地灵活重组和设计实验,对于硬件上的新变化、新技术,更难以应对;另外,硬件的损耗、故障等,都会影响实验的效果,这不利于教学的组织,对学生理解原理和学习知识造成了干扰。
2.3运用虚拟实验能够突破传统实验的束缚
虚拟实验是现代信息技术发展的产物,虚拟实验室的开发与应用将对实验教学产生革命性影响。
奥苏伯尔的“认知结构迁移”理论提出了影响迁移的认识结构的3个主要变量,即可利用性、可辨别性和稳定性。可利用性是指在面对新知识的学习时,学习者原有认知结构中是否具有用来同化新知识的适当观念;可辨别性是指面对新知识的学习时,学习者能否清晰分辨新旧知识间的异同;稳定性是指面对新知识的学习时,用来同化新知识的原有知识是否已被牢固掌握。学生在某一领域的认知结构越具有可利用性、可辨别性和稳定性,就越容易导致正迁移。虚拟现实技术及相关技术的发展水平已使其可以胜任对真实实验室的模拟。虚拟实验系统的虚拟性、实践性、灵活性,使其在建立概念、弄清原理、培养解决问题的方法和能力方面具备了实际实验所不具备的某些特殊优势。通过虚拟实验室反复实验所获得的体验,可以顺利地迁移到真实设备上。
Proteus是世界上著名的EDA工具,它实现了从原理图、代码调试到单片机与外围电路协同仿真,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。运用Proteus 构建虚拟实验室,实现了拥有一台PC机就拥有一间实验室的梦想。它可以将复杂的教学问题进行分解,可以将不便观察的现象仿真演示,可以将实验从实验室扩展到学生课前预习和家庭作业中,充分发挥了信息化教学的作用。
3虚拟实验在LED数码管多位动态显示教学中应用的难点LED数码管多位动态显示原理和相应的端口扩展方法,是学生较难掌握的知识难点。在教学过程中,如果能恰当地利用虚拟实验易于观察、变化灵活的特点,对教学知识点进行合理分解,每个知识点均配以相应的实验,在所有知识难点都得以突破后,再进行综合运用和真实实验,则会取得很好的教学效果。
3.1运用虚拟实验认识“位选”概念
数码管多位动态显示的硬件连接特点是将各个数码管字型码端口连接在一起,理论上从单片机中送出的字型码会被所有数码管接收。在这种情况下如何让每只数码管分别显示不同的字型,是学生难于理解的第一个问题,为此设计如图1所示的实验。通过程序送出字型码的同时,用开关手动控制每只数码管公共端的高低电平,让学生清楚地看到字型码有选择地送达不同数码管的过程,从而弄清很重要的“位选”概念。
图1用虚拟实验中认识“位选”
3.2运用虚拟实验感受“动态”的原理
在了解了“位选”的概念后学生又会有另一个疑惑:为什么数码管明明是轮流显示的,可看上去却同时显示?这时再通过另一个虚拟实验(见图2),用程序去控制公共端电平的切换,并逐渐加快电平切换的速度,学生最终会看到一个奇迹,尽管数码管是轮流显示的,但最终看上去却同时稳定地显示了。在观察到上述现象后,再向学生揭示人眼的“视觉暂留”现象,从而帮助理解这个“动态”的概念,为进一步学习控制程序打下基础。
图2用虚拟实验感受“动态”
图3用虚拟实验体验端口扩展
图4用虚拟实验培养综合运用能力
3.3运用虚拟实验体验端口扩展方法
通过前面的学习,学生已掌握了数码管多位动态显示的基本原理与编程方法。在上述硬件连接中,为了实现8位数码管的显示,共占用了两组完整的端口。
第四篇:单片机数码管显示实验
实验一
数码管实验
一、实验目的
1.了解数码管的显示原理;2.掌握JXARM9-2440 中数码管显示编程方法
二、实验仪器
JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、串口连接线、PC机。
三、实验原理
7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
LED显示器的接口一般有静态显示与动态显示接口两种方式。
本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x20007000,位0-位5每位分别对应一个数码管,将其中某位清0 来选择相应的数码管,地址0x20006000 为数码管的数据寄存器。数码管采用共阳方式,向该地址写一个数据就可以控制LED 的显示,数据中的1对应的不亮,0对应的亮,数码管各位从高到低排列为dp-g-f-e-d-c-b-a,例如当数据寄存器是11111111时则不亮,当是01111111时则显示8,其原理图如图所示。
四、实验内容
1、编程实现:六个数码管同时正向显示0-F,然后反向显示F-0。
2、编程实现:在六个数码管上依次显示与自己姓名有关的内容,可分辨出轮流显示。
3、编程实现:在六个数码管上依次显示与自己姓名有关的内容,分辨不出轮流显示。
4*、编程实现:在每个数码管上递增显示0—9。5*、自行开发。
五、实验程序
1, /****************************************************************************/ /*文件名称: LEDSEG7.C
*/ /*实验现象: 数码管依次显示出0、1,2、„„
9、a、b、C、d、E、F
*/ /****************************************************************************/ #define U8 unsigned char unsigned char seg7table[16] = {
/* 0
7*/
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,/* 8
A
B
C
D
E
F*/
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e, };void Delay(int time);/****************************************************************************/ /* 函数说明: JXARM9-2410 7段构共阳数码管测试
*/ /* 功能描述: 依次在7段数码管上显示0123456789ABCDEF
*/ /* 返回代码: 无
*/ /* 参数说明: 无
*/ /****************************************************************************/ void Test_Seg7(void){
int i;
*((U8*)0x20007000)=0x00;/*6个数码管都亮*/ for(;;){
/*数码管从0到F依次将字符显示出来*/
for(i=0;i<0x10;i++)
{
*((U8*)0x20006000)=seg7table[i];
Delay(10000);
}
/*数码管从F到0依次将字符显示出来*/
for(i=0x0f;i>0x00;i--)
{
*((U8*)0x20006000)=seg7table[i];
Delay(10000);
} }
// TODO } /****************************************************************************/
/* Function name : 循环延时子程序
*/ /* Description : 循环 'time' 次
*/ /* Return type :void
*/ /* Argument
: 循环延时计数器
*/ /****************************************************************************/ void Delay(int time){
int i;int delayLoopCount=10000;
for(;time>0;time--);
for(i=0;i 2, /****************************************************************************/ /*文件名称: LEDSEG7.C */ /*实验现象: 数码管依次显示ZHAngg,并能看出轮流显示 */ /****************************************************************************/ #define U8 unsigned char unsigned char seg7table[16] = { /* Z H A n g g 7*/ 0xa4,0x89,0x88,0xc8,0x90,0x90,0x82,0xf8,/* 8 A B C D E F*/ 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,/* H I N*/ 0x89,0xcf,0x48 };void Delay(int time);/****************************************************************************/ /* 函数说明: JXARM9-2410 7段构共阳数码管测试 */ /* 功能描述: 在六个数码管上分别显示字母,与姓名有关 */ /* 返回代码: 无 */ /* 参数说明: 无 */ /****************************************************************************/ void Test_Seg7(void){ int i; *((U8*)0x20007000)=0x00; for(;;) { *((U8*)0x20007000)=0x1f; *((U8*)0x20006000)=seg7table[0]; Delay(10000); *((U8*)0x20007000)=0x2f; *((U8*)0x20006000)=seg7table[1]; Delay(10000); *((U8*)0x20007000)=0x37; *((U8*)0x20006000)=seg7table[2]; Delay(10000); *((U8*)0x20007000)=0x3b; *((U8*)0x20006000)=seg7table[3]; Delay(10000); *((U8*)0x20007000)=0x3d; *((U8*)0x20006000)=seg7table[4]; Delay(10000); *((U8*)0x20007000)=0x3e; *((U8*)0x20006000)=seg7table[5]; Delay(10000);} // TODO } /***************************************************************************/ /* Function name : 循环延时子程序 */ /* Description : 循环 'time' 次 */ /* Return type :void */ /* Argument : 循环延时计数器 */ /****************************************************************************/ void Delay(int time){ int i;int delayLoopCount=10000; for(;time>0;time--); for(i=0;i 3, /****************************************************************************/ /*文件名称: LEDSEG7.C */ /*实验现象: 数码管依次显示出ZHAngg,并看不出轮流显示 */ /****************************************************************************/ #define U8 unsigned char unsigned char seg7table[16] = { /* Z H A n g g 7*/ 0xa4,0x89,0x88,0xc8,0x90,0x90,0x82,0xf8,/* 8 A B C D E F*/ 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,/* H I N*/ 0x89,0xcf,0x48 };void Delay(int time);/****************************************************************************/ /* 函数说明: JXARM9-2410 7段构共阳数码管测试 */ /* 功能描述: 在六个数码管上分别显示字母,与姓名有关 */ /* 返回代码: 无 */ /* 参数说明: 无 */ /****************************************************************************/ void Test_Seg7(void){ int i; *((U8*)0x20007000)=0x00; for(;;) { *((U8*)0x20007000)=0x1f; *((U8*)0x20006000)=seg7table[0]; Delay(10000); *((U8*)0x20007000)=0x2f; *((U8*)0x20006000)=seg7table[1]; Delay(10000); *((U8*)0x20007000)=0x37; *((U8*)0x20006000)=seg7table[2]; Delay(10000); *((U8*)0x20007000)=0x3b; *((U8*)0x20006000)=seg7table[3]; Delay(10000); *((U8*)0x20007000)=0x3d; *((U8*)0x20006000)=seg7table[4]; Delay(10000); *((U8*)0x20007000)=0x3e; *((U8*)0x20006000)=seg7table[5]; Delay(1);} // TODO } /***************************************************************************/ /* Function name : 循环延时子程序 */ /* Description : 循环 'time' 次 */ /* Return type :void */ /* Argument : 循环延时计数器 */ /****************************************************************************/ void Delay(int time){ int i;int delayLoopCount=10000; for(;time>0;time--); for(i=0;i 4, /****************************************************************************/ /*文件名称: LEDSEG7.C */ /*实验现象: 数码管依次显示出0、1,2、„„ 9、a、b、C、d、E、F */ /****************************************************************************/ #define U8 unsigned char unsigned char seg7table[16] = { /* 0 7*/ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,/* 8 A B C D E F*/ 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e, };void Delay(int time);/****************************************************************************/ /* 函数说明: JXARM9-2410 7段构共阳数码管测试 */ /* 功能描述: 依次在7段数码管各自递增显示0—9 */ /* 返回代码: 无 */ /* 参数说明: 无 */ /****************************************************************************/ void Test_Seg7(void){ int i;for(;;){ for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x1f; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x2f; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x37; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x3b; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } for(i=0;i<=0x09;i++) { *((U8*)0x20007000)=0x3d; *((U8*)0x20006000)=seg7table[i]; Delay(10000); } } // TODO } /****************************************************************************/ /* Function name : 循环延时子程序 */ /* Description : 循环 'time' 次 */ /* Return type :void */ /* Argument : 循环延时计数器 */ /****************************************************************************/ void Delay(int time){ int i;int delayLoopCount=10000; for(;time>0;time--); for(i=0;i 六、实验结果与分析 实验一结果:六个数码管同时显示相同的符号,从0-F再由F-0之间的循环变换。 分析:在数码管扫描控制地址处选中六个数码管,使其同时亮,在给其数码管的数据寄存器存入不同符号对应的数值,加上相应的延迟,就 可以是轮流变换的循环的符号变换。 实验二结果:第一个数码管显示Z后,第二个显示H,接着第三个显示A,接着第四个显示n,接着第五个显示g,接着第六个显示g,接着第一个再显示Z…..如此循环。 分析:设置控制地址使其单独并且循环显示,每个数码管的数据寄存器送入不同的符号的数值,并设置较大的延迟时间即可产生该现象。 实验三结果:六个数码管一起显示“ZHAngg”。 分析:原理同实验二,只是将延迟时间改小到人眼无法分辨的地步即使一起显示。 实验四结果:第一个数码管显示0—9之后,第二个接着显示0—9,接着第三个,第四个….分析:设置循环使六个数码管循环单独显示,在每个数码管显示中再加入循环,使其递增显示0—9,设置较大的延迟,是我们可以看清实验现象。 七、实验总结与心得体会 本次试验需要了解数码管的基本工作原理,基于C语言设计编程完成实验,实验的关键在于把握实现各种现象的本质上的差异,在程序上作出修改。通过本次试验对于实验的严谨性有了进一步的体验,稍有不小心实验结果就适得其反,以后要更加用心,更加认真的做实验。 传感器实验报告五 姓名 江璐 学号 1315212017 班级 电子二班 时间 2015.12.2 实验题目 CC2530基础实验 一:实验设备 1.硬件:教学实验箱、PC机。 2.软件:PC机操作系统Windows 98(2000、XP)+IAR开发环境。 二:实验 (一)光照传感器采集实验 1.实验目的 (1)掌握光照传感器的操作方法。 (2)掌握光照传感器采集程序的编程方法。 2.实验内容 在IAR集成开发环境中编写光照传感器采集程序。 3.相关电路图 4.程序 5.实验现象 (二)人体感应传感器采集实验 1.实验目的 (1)掌握人体感应传感器的操作方法。 (2)掌握人体感应传感器采集程序的编程方法。 2.实验内容 在IAR集成开发环境中编写体感应传感器采集程序。3.相关电路图 4.程序 5.实验现象 人靠近人体感应器的时候D2、D3灯闪亮,远离时灯灭。 (三)震动传感器采集实验 1.实验目的 (1)掌握震动传感器的操作方法。 (2)掌握震动传感器采集程序的编程方法。 2.实验内容 在IAR集成开发环境中编写震动传感器采集程序。 3.相关电路图 4.程序 5.实验现象 拿起通用调试母板晃动,无晃动时D2、D3灯不亮,有晃动时D2、D3灯闪亮,剧烈晃动时D2、D3灯闪亮频率加快。 (四)烟雾传感器采集实验 1.实验目的 (1)掌握烟雾传感器的操作方法。 (2)掌握烟雾传感器采集程序的编程方法。 2.实验内容 在IAR集成开发环境中编写烟雾传感器采集程序。 3.相关电路图 4.程序 5.实验现象 串口调试助手显示可燃气体传感器的输出值。 三:心得体会 震动传感器采集程序时一直没有用,后面才发现少了程序,加上后就可以正常运行了。第五篇:传感器实验五