拨码开关控制实验电路

合集下载

单片机课程设计例题2-使用拨码开关输入数据

单片机课程设计例题2-使用拨码开关输入数据

n n n n
n n n n n
5.程序仿真

在Keil集成开发环境中 集成开发环境中,输入上述源程序并命 名为lm4-2.c,建立名为 建立名为lm4-2的工程并将lm42.c加入工程中,经编译 经编译、链接后进入调试状 态,打开Parallel Parallel Port1、Parallel Port1 Port2对 话框,单步运行,观察 观察P2口、P1口的电平变化, 当单击P2.2、P2.4引脚为低电位时 引脚为低电位时,对应的 P1.2、P1.4引脚也为低电位 引脚也为低电位。
4.程序设计
(1)流程图
开始
读P2口数据 口数据 送P1口 延时
图4­11 例题2程序流程图
n
n n n
(2)C语言程序
#include<regx51.h> void delay (void) { q unsigned int i, j; q for (i=0; i<500; i++) for (j=0; j<120; j++); } void main (void) { q unsigned char buffer; q for( ; ; ) { buffer = P2; P1 = buffer; delay ( ); } }
6.习题
n
n
①用do while语句替代主程序中的for语句,编 写主程序。 ②用while语句替代主程序中的for语句,编写 主程序。
+5V
图4­10 拨码开关输入数据电路图
3. 电路元件使用介绍
n
拨码开关(DIP开关)广泛使用在电子信息 广泛使用在电子信息、通 讯等需要手动编制的产品中 讯等需要手动编制的产品中。按拨码开关内部的 开关数量,拨码开关可分为 拨码开关可分为2P、4P、8P等,2P拨 码开关内部有2个独立的开关 个独立的开关,4P拨码开关内部 有4个独立的开关等,通常会在拨码开关上标示 通常会在拨码开关上标示 记号“ON” ,若将开关滑块拨到 若将开关滑块拨到“ON” 的一边,则 接点接通,拨到另一边则为不通 拨到另一边则为不通。

Basys3实验指导手册

Basys3实验指导手册

Basys3‎实验指导手册‎第一章Basys3‎硬件电路Basys3‎是围绕着一个‎X ilinx‎Artix-7 FPGA芯片‎X C7A35‎T-1CPG23‎6C搭建的,它提供了完整‎、随时可以使用‎的硬件平台,并且它适合于‎从基本逻辑器‎件到复杂控制‎器件的各种主‎机电路。

Basys3‎上集成了大量‎的I/O设备和FP‎GA所需的电‎路,由此可以构建‎无数设备而不‎需其他器件。

主要规格/特殊功能产品规格:Basys3‎为想要学FP‎GA和数字电‎路设计的用户‎提供了一个理‎想的电路设计‎平台。

Basys3‎开发板提供完‎整的硬件存取‎电路,可以完成从基‎本逻辑到复杂‎控制器的设计‎。

四个标准扩展‎连接器配合用‎户设计的电路‎板,或Pmods‎(Digile‎n t设计的A‎/D和D/A转换,电机驱动器,传感器输入等‎)其他功能。

附带USB电‎缆提供电源和‎编程接口,使得其成为入‎门复杂数字电‎路设计系统的‎完美低成本平‎台。

关键特性:1、33,280 个逻辑单元,六输入LUT‎结构2、1,800 Kbits 快速RAM块‎3、5个时钟管理‎单元, 均各含一个锁‎相环(PLL)4、90个DSP‎slices‎5、内部时钟最高‎可达450M‎Hz6、1个片上模数‎转换器(XADC)外围设备:1、16个拨键开‎关2、16个LED‎3、5个按键开关‎4、4位7段数码‎管5、3个Pmod‎连接口6、一个专用AD‎信号Pmod‎接口7、12位的VG‎A输出接口8、USB-UART桥9、串口flas‎h10、用于FPGA‎编程和通信的‎U SB-JTAG口11、可连接鼠标、键盘、记忆棒的US‎B口Basys3‎开发板可以通‎过2种方式进‎行供电,一种是通过J‎4的USB 端口供电;另一种是通过‎J6的接线柱‎进行供电(5V)。

通过JP2跳‎线帽的不同选‎择进行供电方‎式的选择。

电源开关通过‎S W16进行‎控制,LD20为电‎源开关的指示‎灯。

拨码开关输入数码管显示实验

拨码开关输入数码管显示实验

综合课程设计实验报告班级:姓名:学号:11指导老师:实验名称:拨码开关输入数码管显示实验实验要求:1. 掌握数码管显示原理2. 掌握拨码开关工作原理3. 通过FPGA用拨码开关控制数码管显示实验目标:4位拨码开关分别对应4位数码管,拨动任意1位开关,对应的数码管将显示数字1,否则显示数字0。

实验设计软件Quartus II实验原理1.数码管显示模块电路原理图:如图所示,数码管中a,b,c,d,e,f,g,dp分别由一个引脚引出,给对应的引脚高电平,则对应引脚的LED点亮,故我们在程序中可以设定一个8位的二进制数reg【7:0】h,每一位对应一个相应的引脚输出,那么我们就可以通过对x的赋值,控制对应的8个LED亮灭的状态进行数字显示。

例如,如果我们显示数字2,则在数码管中,a、b、d、e、g亮,c、f、dp不亮,则显示的是数字2,即h=’b代表显示数字2。

2.拨码开关模块电路原理图:拨码开关有8个引脚,每个引脚对应于数码管的一个LED灯,当拨码开关的一个引脚是高电平时,则对应的数码管一个LED灯亮,其他7个LED等不亮。

通过此原理来实现数码管的LED灯亮暗情况从而实现数码管的数字显示。

例如当第一个拨码接通时,此时输入信号为8'b对应的数码管的输出信号为out=8'b,此时相当于数码管a,b,c,d,e,f,g亮,7段数码管全部显示,显示的数字为8。

程序代码module bomakaiguan(out,key_in,clk);assign p='b1111;output[7:0] out=8'b;input[7:0] key_in;input clk;reg[7:0] out;always @(posedge clk)begincase(key_in)8'b: out=8'b;8'b00000001: out=8'b01100000;8'b00000010: out=8'b;8'b00000100: out=8'b;8'b00001000: out=8'b01100100;8'b00010000: out=8'b;8'b00100000: out=8'b;8'b01000000: out=8'b;endcaseendendmodule。

dsp实验5:拨码开关控制实验

dsp实验5:拨码开关控制实验

苏州职业大学实训报告科目:DSP应用技术实训项目:拨码开关控制实验一、实验目的:1.了解ICETEK–F2812-A 评估板在TMS320F2812DSP 外部扩展存储空间上的扩展。

2.了解ICETEK–F2812-A 评估板上拨码开关扩展原理。

3.熟悉在C 语言中使用扩展的控制寄存器的方法。

二、实验设备:计算机,ICETEK-F2812-A 实验箱(或ICETEK 仿真器+ICETEK–F2812-A 系统板+相关连线及电源)。

三、实验原理:1.TMS320F2812DSP 的存储器扩展接口存储器扩展接口是 DSP 扩展片外资源的主要接口,它提供了一组控制信号和地址、数据线,可以扩展各类存储器和存储器、寄存器映射的外设。

-ICETEK–F2812-A 评估板在扩展接口上除了扩展了片外SRAM 外,还扩展了指示灯、DIP 开关和D/A 设备。

具体扩展地址如下:C0002-C0003h: D/A 转换控制寄存器C0001h:板上 DIP 开关控制寄存器C0000h:板上指示灯控制寄存器-与ICETEK–F2812-A 评估板连接的ICETEK-CTR 显示控制模块也使用扩展空间控制主要设备:108000-108004h:读-键盘扫描值,写-液晶控制寄存器108002-108002h:液晶辅助控制寄存器108003-108004h:液晶显示数据寄存器2.拨码开关扩展原理图 5.1指示灯扩展原理3.实验程序流程图四、实验步骤:1.实验准备关闭实验箱上扩展模块和信号源电源开关。

2.设置Code Composer Studio 3.3 在硬件仿真(Emulator)方式下运行3.启动Code Composer Studio 3.3选择菜单Debug→Reset CPU。

4.打开工程文件工程文件为:C:\ICETEK\F2812\DSP281x_examples\Lab0301-LED\LED.pjt打开源程序LED.c 阅读程序,理解程序内容。

利用拨码开关控制米字管进行十进制数字显示 数字电路设计课程设计

利用拨码开关控制米字管进行十进制数字显示 数字电路设计课程设计

利用拨码开关控制米字管进行十进制数字显示数字电路设计课程设计中北大学课程设计说明书学生姓名:杨泽政学号:0806024119学院: 电子与计算机科学技术学院专业: 微电子学题目: 利用拨码开关控制米字管进行十进制数字显示指导教师:王红亮段俊萍职称: 讲师2011 年 6 月 24 日目录1、课程设计目的 (2)2、课程设计内容及要求 (2)2.1、设计内容 (2)2.2、设计要求 (2)3、设计方案及实现情况 (2)3.1、设计思路 (2)3.2、工作原理及框图 (2)3.3、各模块功能描述 (4)3.4、仿真结果 (6)3.5、试验箱验证情况 (7)4、课程设计总结 (9)5、参考文献 (11)1、课程设计目的1.学习操作数字电路设计实验开发系统,掌握米字管的工作原理及应用。

2.掌握组合逻辑电路、时序逻辑电路的设计方法。

3.学习掌握可编程器件设计的全过程。

2、课程设计内容和要求2.1、设计内容用VHDL语言编写程序,利用拨码开关控制米字管进行十进制数字显示。

2.2、设计要求1.学习掌握拨码开关控制模块、米字管的工作原理及应用;2. 熟练掌握VHDL编程语言,编写拨码开关控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数字的显示;5. 整理设计内容,编写设计说明书。

3、设计方案及实现情况3.1、设计思路采用模块化的设计思想,本实验结果的实现只需要两个模块就可以了。

首先是拨码开关的输入模块,然后是米字管的显示模块。

工作过程如下:首先输入一组开关信息,在拨码开关输入模块中进行一次信息存储,然后在米字管的显示模块中进行一次译码,使得米字管进行十进制数显示。

3.2、工作原理及框图(1)拨码开关工作原理拨码开关其实就是一个高低电平输出器件,往上拨为高电平,往下拨为低电平。

(2)米字管的工作原理实验箱上的米字管是共阴极接法,当接的是高电平时,对应的数字段就会发光。

简易0-9拨码器电路的设计

简易0-9拨码器电路的设计

简易0-9拨码器电路的设计拨码器是一种数字电路,用于将二进制输入信号转换为相应的十进制输出信号。

常见的拨码器有0-9十进制拨码器。

要设计一个简易的0-9拨码器电路,可以采用以下步骤:1.确定拨码器的输入:0-9十进制拨码器通常有四个二进制输入信号,表示三位二进制数字。

例如,两位二进制数字为00,01,10和11。

2.确定拨码器的输出:需要将输入信号转换为相应的十进制数字输出。

对于0-9的十进制拨码器,共需要10个输出信号,分别对应数字0-9。

3.分析真值表:根据拨码器的输入和输出,绘制出真值表。

真值表显示了输入信号和对应的输出信号之间的关系。

4.使用逻辑门实现:根据真值表,选择适当的逻辑门(如与门、或门、非门等)进行电路设计。

逻辑门可用于将输入信号与输出信号进行逻辑运算。

5.组合逻辑电路设计:使用逻辑门将输入信号转换为相应的输出信号。

根据真值表,设计逻辑门的连接方式和逻辑关系。

可以使用电路设计工具如LogicWorks进行电路设计,或者使用简单的逻辑门芯片进行设计。

6.连接输入和输出:将输入信号与逻辑门的输入端连接,将逻辑门的输出端与对应的输出信号连接。

确保连接正确,以确保输入信号正确地转换为输出信号。

7.测试电路:使用输入信号测试电路,确保电路能够正确地将输入信号转换为输出信号。

8.优化电路:如果电路存在延迟、功耗等问题,可以对电路进行优化。

例如,可以使用更快的逻辑门芯片、优化布线方式等。

总结:设计一个0-9的简易拨码器电路,需要确定输入和输出、分析真值表、选择适当的逻辑门和进行电路设计、连接输入和输出、测试电路。

设计拨码器电路需要一定的逻辑门知识和电路设计技巧。

有了电路设计,可以方便地将二进制信号转换为相应的十进制数字输出。

数电实验

数电实验

Si Ai Bi Ci 1 Ai Bi Ci 1 Ai Bi Ci 1 Ai Bi Ci 1 Ci Ai Bi Ai Ci 1 Bi Ci 1
得 p78 图4 . 3. 6 ------太繁琐
教材p78图4.3.7 用异或门和与非门来实现全加运算。----自己推导公 式----p78。
实验预习要求 1、复习有关计数器部分内容 2、绘出各实验内容的详细线路图 3、拟出各实验内容所需的测试记录表格 4、查手册,给出并熟悉实验所用各集成块的引脚排列图 实验报告 1、画出实验线路图,记录、整理实验现象及实验所得的有 关波形。对实验结果进行分析。 2、总结使用集成计数器的体会。
移位寄存器及其应用
(5)平均传输延迟时间tpd :是衡量门电路开关速度的参数, 它是指输出波形边沿的0.5Um至输入波形对应边沿0.5Um点 的时间间隔。
tpd
1 tpd (tpdL tpdH ) 2
T 6
实验五:组合逻辑电路的设计与测试
一、实验目的 掌握组合逻辑电路的设计与测试方法
二、实验内容 1、设计用与非门及用异或门、与门组成的半加器电路。 要求按本文所述的设计步骤进行,直到测试电路逻辑功能符 合设计要求为止。 2、设计一个一位全加器,要求用异或门、与门、或门组成。 3、设计一位全加器,要求用与或非门实现。 4、设计一个对两个两位无符号的二进制数进行比较的电路; 根据第一个数是否大于、等于、小于第二个数,使相应的三 个输出端中的一个输出为“1”,要求用与门、与非门及或非 门实现。
实验预习要求 1、根据实验任务要求设计组合电路,并根据所给的标准器件 画出逻辑图。 2、如何用最简单的方法验证“与或非”门的逻辑功能是否完好? 3、“与或非”门中,当某一组与端不用时,应作如何处理?

拨码开关的电子密码锁控制电路

拨码开关的电子密码锁控制电路

实训成绩批阅教师日期实训报告课程名称电子电路设计和实践专业班级电子信息工程1012班学号#######学生姓名***指导教师赵永康、杜礼霞实训地点综合楼2楼2012 年12 月21 日目录一、电路功能及用途(可从演示效果叙述) 0二、作品照片 (1)三、电路组成(框图及文字叙述) (2)四、电路图 (3)五、电路工作原理 (4)六、元器件选择 (6)七、制作调试过程 (6)八、使用说明书 (7)九、附录 (8)附一:发光二极管(LED)正向特性实验 (8)附二:555多谐震荡电路特性实验 (8)附三:三极管放大特性实验 (10)十、小结 (10)拨码开关的电子密码锁控制电路一、电路功能及用途(可从演示效果叙述)拨码开关的电子密码锁控制电路,就是把传统物理的开锁装置改变成由电子电路来控制的一个开锁装置,就是由多位0--9的十进制数字组成的密码来控制开锁,在密码输入正确的情况下可以打开锁,当然要是密码输入错误三次或者以上就会报警,这样可以防止别人试密码。

拨码锁适用于在、保险柜、保险箱文件柜、防磁防火柜、银库门、防盗门、车门、民用门及机械卡阻机构上广泛使用。

它可以替代现有的传统圆盘式机械密码锁和部分电子密码锁。

这种装置可以省略很多生活中不必要的麻烦,比如忘带钥匙之类的问题。

并且开锁比传统机械锁快捷方便。

二、作品照片背面电路部分正面密码输入部分三、电路组成(框图及文字叙述)开始输入密码,如果密码和初始设置的密码相等,按下确定按钮就开锁,如果密码输入错误,那么计数器就记录一次错误,当密码输入超过3次就报警输入密码 按确定键 记录错误次数 开锁 密码错误 判断密码是否正确 密码正确 达到3次错误报警解除报警四、电路图密码锁控制电路报警电路稳压电源电路五、电路工作原理分析拨码开关结构原理,可以知道拨码开关也就是一个把0--9的十进制数值转换成二进制电路的装置。

在每一位数字的拨码开关中有四个输出端和一个公共端,当设置的十进制密码装换成二进制数时,在其中含有1的所有位就会和公共端接通,而所有的0的位就会处于悬空的状态。

拨码开关控制实验电路图

拨码开关控制实验电路图

拨码开关控制实验电路图拨码开关控制实验电路图流程图/* 基本开关控制实验 *///==宣告区=================================#include //定义8051头文件,引入reg52.h #define SW P2//定义开关接至P2#define LED P1//定义LED 接至P 1//==主程式=================================main()//主程序开始{ SW=0xff;//规划输入端口while(1)//无穷循环, 程式一直跑LED=SW;//读取开关(P2)状态, 输出到LED(P1)}//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若希望拨码开关中的S1、S3、S5三个开关都on ,则前四个LED 亮;S2 或 S4 或 S6开关 on,则后四个LED 亮;S7及S8 开关 on,则所有LED 全亮,程序应如何编写?若将拨码开关换成一般家里墙壁上的开关,而LED 换成继电器(RELAY ),是否可作为家里的负载控制?按钮ON-OFF 控制实验按钮 ON-OFF 控制实验电路图流程图如下:/* 基本按钮 ON-OFF 控制实验 *///==声明区=======================================#include//定义8051头文件,引入reg52.hsbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1sbit LED=P1^0;//声明LED 为P1.0//==主程式=======================================main()//主程序开始{ LED=1;//关闭LEDPB1=PB2=1;//规划输入端口 while(1)//无穷循环, 程式一直跑 {if (PB2==0) LED=1;//若按下PB2,则关闭LED else if (PB1==0) LED=0;//若按下PB1,则点亮LED }//while循环结束}//结束程序思考一下!在本实验里,有没有“抖动”的困扰?若将按钮开关当成启动电机的 ON-OFF 开关,而 LED 换成继电器(RELAY ),是否可作为电机控制?若同时按下 PB1 与 PB2按钮会怎样?按钮切换式控制实验按钮切换式控制实验电路图流程图实验代码:/* 按钮切换式控制实验 *///==声明区=====================================#include//定义8051头文件,引入reg52.h sbitPB1=P2^0;//声明PB1接至P2.0sbit LED=P1^0;//声明LED 接至P1.0void debouncer(void);//声明防弹跳函数//==主程序=====================================main()//主程式开始{ LED=1;//关闭LEDPB1=1;//规划P2.0为输入埠while(1)//无穷循环, 程序一直跑 { if (PB1==0)//若按下PB1 { debouncer();//呼叫防弹跳函数(按下时) LED=!LED;//切换LED 为反相 while(PB1 != 1);//若仍按住PB1,继续等debouncer();//呼叫防弹跳函数(放开时) }//if叙述结束 }//while循环结束}//主程序结束//==子程序=====================================/* 防弹跳函数函数, 延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变数ifor(i=0;i}//防弹跳函数结束思考一下!在本实验里,改变 debouncer 函数的时间长短,看看有什么影响?若按住 PB1不放会怎样?如何改善?按钮开关应用电路图流程图代码如下:/* 按钮开关应用(两按钮控制七段显示器上下数) *///==声明区========================================== #include//定义8051头文件,引入reg52.h 文件 #define SEG P0//定义七节显示器接至P0端口/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80, 0x98};//数字0-9sbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1void debouncer(void);//声明防弹跳函数//==主程式================================= main()//主程序开始{ unsigned char i=0;//声明变量i 初值=0PB1=PB2=1;//规划输入端口 SEG=TAB[i];//输出数字至七段显示器 while(1)//无穷循环, 程式一直跑 { if (PB1==0)//判断PB1是否按下 { debouncer();//呼叫防弹跳函数 i= (i=9清除为0 SEG=TAB[i]; //输出数字至七段显示器while(PB1==0); //PB1是否按住?debouncer(); //呼叫防弹跳函数 }//if叙述结束 if(PB2==0)//判断PB2是否按下 { debouncer();//呼叫防弹跳函数 i= (i>0)? i-1:9;//若i>0则i=i-1,i}//主程序结束//==子程序==================================/* 防弹跳函数函数, 延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变量ifor(i=0;i}//防弹跳函数结束思考一下!在本实验里,若按钮按住不放,会怎样?如何改善?在本实验里,若 PB1与 PB2两个按钮同时按,会怎样?BCD 数字型拨码开关实验BCD 数字型拨码开关实验电路图流程图实验代码:/* BCD数字型指拨开关实验 *///==声明区======================================#include//定义8051头文件,引入reg52.h 文件 #define SEG P0//定义七节显示器接至P0#define SW P2//定义开关接至P2/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80, 0x98};//数字0-9#define SW_H() SW&0x0f//读取开关值(P2清除高4bits)//==主程序======================================main()//主程序开始{ SW=0xff;//规划输入埠while(1)//无穷循环, 程序一直跑 SEG=TAB[SW_H()];//读取开关值, 输出至七节显示器(P0) }//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若把本单元的BCD 数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?多重按钮开关实验多重按钮开关实验电路图流程图实验中的自编库函数/* myio.h自己写的程序库 *///==声明区==============================#define LED P1//定义LED 接至P1void debouncer(void);//声明防弹跳函数void delay10ms(int);//声明10毫秒延迟函数void alter(int);//声明交互闪烁函数void left(int);//声明单灯左移函数void right(int);//声明单灯右移函数void pili(int); //声明霹雳灯函数void flash(int);//声明闪烁函数//==自己写的子程序========================/* 防弹跳函数函数, 延迟约20ms */void debouncer(void)//防弹跳函数开始{ delay10ms(2);//延迟约20ms}//防弹跳函数结束/* 延迟函数开始, 延迟约x 10ms */void delay10ms(int x)//延迟函数开始{ int i,j;//声明整数变量i,jfor (i=0;i}//延迟函数结束/* 高低位元交互闪烁函数, 执行x 次 */void alter(int x)//高低位元交互闪烁函数开始{ int i;//声明变量iLED=0x0f;//初始状态(高位元亮, 低位元灭) for(i=0;i }//高低位元交互闪烁函数结束/* 全灯闪烁函数, 执行x 次 */void flash(int x)//全灯闪烁函数开始{ int i;//声明变量iLED=0x00;//初始状态(全亮) for(i=0;i}//全灯闪烁函数结束/* 单灯左移函数, 执行x 圈 */void left(int x)//单灯左移函数开始{ int i, j;//声明变量i,j}//单灯左移函数结束/* 单灯右移函数, 执行x 圈 */void right(int x)//单灯右移函数开始 for(i=0;i{ int i, j;//声明变量i,jfor(i=0;i>1)|0x80;//左移1位後,MSB 设为1 }//j循环结束delay10ms(25);//延迟25 10m=0.25s }//i循环结束}//单灯左移函数结束/* 霹雳灯函数, 执行x 圈 */void pili(int x)//霹雳灯函数开始{ int i;//声明变量ifor(i=0;i}//霹雳灯函数结束多重按钮开关实验之一:代码/* 多重按钮开关实验之1 *///==声明区================================#include//定义8051头文件,引入reg52.h 文件#include"myio.h"//自己写的I/O程序库sbit PB1=P2^0;//声明PB1=P2.0sbit PB2=P2^1;//声明PB2=P2.1sbit PB3=P2^2;//声明PB3=P2.2sbit PB4=P2^3;//声明PB4=P2.3//==主程序================================main()//主程序开始{ LED=0xff;//初始状态(LED全灭)P2=0xff;//规划P2输入端口 while(1)//无穷循环, 程序一直跑 { if (PB1==0)//如果按下PB1 { debouncer();//防弹跳alter(3);//高低位元交互闪烁三次 flash(3);}//全灯闪烁三次 else if (PB2==0)//如果按下PB2 { debouncer();//防弹跳 left(3);//单灯左移三圈 flash(3);}//全灯闪烁三次else if (PB3==0)//如果按下PB3 { debouncer();//防弹跳right(3);//单灯右移三圈 flash(3);}//全灯闪烁三次 else if (PB4==0)//如果按下PB4 { debouncer();//防弹跳pili(3);//霹雳灯三圈 flash(3);}//全灯闪烁三次 }//while 循环结束}//主程序结束思考一下!在本实验里,若同时按下多个按钮会如何?在本实验里,若按住按钮不放会如何?在本实验里,其中debouncer 函数是个延迟20毫秒的函数,而 delay10ms 函数是个延迟 10毫秒的函数,可否使用delay10ms 函数取代 debouncer 函数?如何修改?在本实验里,其中alter 函数是个高四位与低四位交替闪烁的函数,而flash 函数是个8灯闪烁的函数,其不同在于其初始值。

4位拨动开关控制数码管显示系统设计

4位拨动开关控制数码管显示系统设计

4位拨动开关控制数码管显⽰系统设计务书设计题⽬4位拨动开关控制数码管显⽰系统设计学⽣姓名设计要求:1.电源电路具有电源开关及指⽰灯,有复位按键;2.⾼4位开关屏蔽;3.⽤4位拨码开关为输⼊,控制数码管显⽰器的输出;4.实现功能:通电复位后数码管全显即显“8”,数码管对应4位DIP开关的⼆进制输⼊显⽰⼗六进制全部字符即从“0”到“F”。

学⽣应完成的⼯作:1.了解单⽚机系统的设计⽅法,设计步骤;2.查找并收集相关资料书籍;3.完成硬件原理图设计;4.完成软件和流程图的设计;5.对系统进⾏仿真;6.焊接电路板,调试系统;7.认真撰写课程设计报告。

8.孙晓界同学主要负责软件设计参考⽂献阅读:[1] 张毅刚,彭喜元,彭宇. 单⽚机原理及应⽤[M]. 北京:⾼等教育出版社,2009.[2] 杜树春. 单⽚机C语⾔和汇编语⾔混合编程实例详解[M]. 北京:北京航空航天⼤学出版社,2006.[3] 童诗⽩,华成英. 模拟电⼦技术基础(第四版)[M]. 北京:⾼等教育出版社,2006.[4] 林志琦. 基于Proteus的单⽚机可视化软硬件仿真[M]. 北京:北京航空航天⼤学出版社,2006. ⼯作计划:5⽉6⽇:查阅相关资料,拟定⽅案;5⽉7⽇:进⾏⽅案论证,完善设计⽅案;5⽉8⽇:完成硬件设计;5⽉9⽇:设计程序流程图;5⽉10⽇:完成软件设计,并进⾏仿真和调试;5⽉13⽇:进⾏焊接;5⽉14⽇:烧写程序;5⽉15⽇:调试电路;5⽉16⽇:与辅导⽼师交流,写课程设计报告;5⽉17⽇:上交课程设计报告及实物。

任务下达⽇期:2013 年5⽉ 6 ⽇任务完成⽇期:2013 年5⽉17 ⽇指导教师(签名):学⽣(签名):4位拨动开关控制数码管显⽰系统设计摘要:⽤AT89S52单⽚机作为核⼼,利⽤晶振,共阳极数码管,7805,桥堆2w10等器件进⾏设计,由电源电路、复位电路、时钟电路、输⼊输出电路等设计⼀个控制电路。

利⽤汇编编写控制程序,程序使⽤查表法进⾏编写。

指示灯+拨码开关

指示灯+拨码开关
基于DSP系统的实验
实验一:指示灯(流水灯)实验
实验二:拨码开关控制实验
• XDS510仿真器驱动的安装 • 5509A实验平台的软件配置 • CCS软件的巩固
• 指示灯、拨码开关控制原理 • 初始化DSP时钟频率 • DSP中EMIF初始化 • 相关寄存器的设置
实验一:指示灯(流水灯)实验
一、实验目的
2.指示灯扩展原理图
TMS320VC5509 可 寻址的存储空间比较 大,接口也比较丰富, 它既可以连接同步的 SDRAM ,也可以连 接异步的SRAM 。因 此,在编程前应该首 先注意程序对存储空 间寄存器的配置。 TMS320VC5509 的 地址寻址也有比较特 殊的地方,从逻辑上 说,5509 采用统一 的编址方式,即存储 器的地址号没有重叠。 但是,存储器宽度分为两种不同的 情况,当存储器按照程序存储空间 使用时,地址编码采用字节寻址方 式,即每8 位存储器占用一个地址 编号,A0信号有效,而按照数据存 储空间使用时,地址编码采用字寻 址方式,即每16 位存储器占用一个 地址编号,A0信号无效。
四、实验步骤 1. 实验准备 连接实验设备;关闭实验箱上扩展模块和信号电源开关。 2. 设置Code Composer Studio v3.3在硬件仿真(emulator)方式下运行。 3. 启动Code Composer Studio v3.3 选择菜单 Debug→Reset CPU。 4. 编译、下载程序。 5. 运行程序,观察结果。 6. 退出CCS。
读取拨码开关控制寄存器并 送指示灯控制寄存器
四、实验步骤
1. 实验准备 连接实验设备;关闭实验箱上扩展模块和信号电源开关。 2. 设置Code Composer Studio v3.3在硬件仿真(emulator)方式下运行。

浙江工业大学指示灯和拨码开关控制实验报告

浙江工业大学指示灯和拨码开关控制实验报告

实验四指示灯和拨码开关控制实验报告姓名:郑永翔班级:通信1103 学号:201103110330实验目的1. 了解 ICETEK-VC5509-A 板在 TMS320VC5509DSP 外部扩展存储空间上的扩展。

2. 了解 ICETEK-VC5509-A 板上指示灯和拨码开关扩展原理。

3. 学习在 C 语言中使用扩展的控制寄存器的方法。

实验内容指示灯实验①拨码开关控制实验②指示灯实验①的程序和原理分析指示灯控制寄存器地址为400001h通过外部存储器(EMIF)接口寻址在0x400001上的4个led单元的值(控制字,逐位置1: 0001B 0010B 0100B 1000B),当led对应位置1时led等亮起,通过控制正向和反向的写入控制字来循环点亮led灯。

#include"func.h"// 定义指示灯寄存器地址和寄存器类型#define LBDS (*((unsigned int *)0x400001))// 子程序接口void Delay(unsigned int nDelay); // 延时子程序main(){unsigned int uLED[4]={1,2,4,8}; // 控制字,逐位置1: 0001B 0010B 0100B1000Bint i;PLL_Init(72); // 初始化DSP运行时钟SDRAM_init(); // 初始化EMIF接口while ( 1 ){for ( i=0;i<4;i++ ){LBDS=uLED[i]; // 正向顺序送控制字Delay(256); // 延时}for ( i=3;i>=0;i-- ){LBDS=uLED[i]; // 反向顺序送控制字Delay(256); // 延时}}}void Delay(unsigned int nDelay){int ii,jj,kk=0;for ( ii=0;ii<nDelay;ii++ ){for ( jj=0;jj<1024;jj++ ){kk++;}}}拨码开关控制实验②的程序和原理分析指示灯控制寄存器地址为0x400001拨码开关控制寄存器地址为0x4000020x400002为扩展地址,四位拨码器开关闭合时该地址对应位置0,打开置1 取0x400002内容后复制给0x400001地址控制led灯,原理如同①#include"func.h"// 定义指示灯控制寄存器地址和寄存器类型#define LBDS (*((unsigned int *)0x400001))// 定义拨码开关控制寄存器地址和寄存器类型#define DIPS (*(unsigned int *)0x400002)main(){// PLL_Init(12); // 初始化DSP运行时钟SDRAM_init(); // 初始化EMIF接口while ( 1 ){LBDS=DIPS; // 读取拨码开关状态直接送指示灯显示}}实验结论1. 映射在扩展存储器空间地址上的指示灯寄存器在设置时是低4 位有效的,数据的最低位对应指示灯D1,次低位对应D2,...依次类推。

实验一:点亮第一个LED灯

实验一:点亮第一个LED灯
示,拨码开关任意拨第四个,第四个灯会亮。
六、讨论
1:仿真软件的安装最后一步需要升级。 2:define 语句不写分号。
七、参考文献
《微机原理与接口技术》实验指导书
第5页
三、程序设计
开始
P0=P1
程序说明:从主程序开始不断执行将 P1 口赋值给 P0 口。
四、程序代码
#include <reg51.h> void main(void) // 程序主函数 {
第3页
技术报告用纸
while(1) // 循环用于实时扫描 IO 状态 { P0=P1; // 将 P1 口的数据发送给 P0 口 } } 五、运行结果
第1页
二、硬件设计
技术报告用纸
图 1-1 LED 接口电路 电路图说明:该图为 LED 接口电路,P0 口连接八个 LED 灯,每个 LED 灯要接 300 欧的上拉电阻 作为保护电路。八个灯为共阳极,低电平点亮 LED 灯。
第2页
技术报告用纸
图 1-2 拨码开关电路图 该图为拨码开关电路图,每个开关拨上连接到地,P1 口为低电平,拨下连接到 VCC,P1 口为高电 平。
实验内容为设置p1为输入口p0口为输出口将p1口的开关状态发送到p0口让灯亮灭将p1的电平状态通过p0口的led的亮灭表示出来
技术报告用纸
电气与自动化工程学院
单片机实训 课程研究型学习 技术报告
项目名称:
点亮第一个 LED 灯
学生姓名:
张倩如
学号: 160512239
项目序号:
1
专业: 自动化
提交时间:
一、项目概述
通过一简单的实验掌握: 1. 掌握 PL2303 驱动的安装,掌握 Keil3 开发环境的安装、设置和基本使用; 2. 掌握项目、文件的建立方法、程序的下载以及寄存器、存储器内容的查看方法; 3. 掌握程序的执行及断点设置方法。 实验内容:通过了解 P1 口的开关控制电路和 P0 的 LED 电路,编写基本输入输出实验程序。实验 内容为设置 P1 为输入口,P0 口为输出口,将 P1 口的开关状态发送到 P0 口,让灯亮灭,将 P1 的电平 状态通过 P0 口的 LED 的亮灭表示出来。 本实验由自己独立一人完成所有上述项目。

DSP实验二拨码开关实验

DSP实验二拨码开关实验

实验二拨码开关实验—、实验目的二、实验设备运算机,版本软件,DSP仿真器,E300实验箱,2812CPU板。

三、实验原理8位的数字量输入(由拨码开关产生),当拨码打到靠近LED时为低。

相反为高。

通过74LS244(可读)缓冲连接到DSP的数据总线的低8位。

CPU通过读指令读取到拨码开关产生的8位输出的数字量,然后CPU通过写指令把读出的8位数字量写入(0x2200)单元内,使连接到DSP的数据总线的低8位的74LS273的输出端产生高低信号,现在LED灯产生亮灭。

当对应LED灯点亮时说明输出为低,熄灭时为高。

(器件74LS244和74LS273详细的介绍请参看数据手册)数字量输入输出单元的资源分派如下:基地址:2000h(当CS1为0时分派有效)数字量分派空间为数据空间地址:基地址+0x2200(低8位,只读)拨码开关扩展工作原理说明:74LS244片选号、74LS273片选信号和74LS273复位信号由E300上CPLD译码产生。

本实验利用DSP数据总线的低8位。

实验任务一:一、编写程序完成将拨码开关的信息读入DSP,然后再将该信息回写,操纵led灯。

调整"数字输入输出单元"的开关K1~K8,观看LED1~LED8灯亮灭的转变。

2、本实验的程序流程框图如下:3、输入要紧程序#include "" 2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON。

2.E300板上的开关SW4的第二位置ON,其余OFF;SW5开关全数置ON;其余开关全数置OFF。

3.运行Code Composer Studio (CCS)(需要“DEBUG→Connect”)4. 用“Project\open”打开系统项目文件途径为“c:\DSP_examep\DSP281X_examples\e300_02_switch\”双击该文件5、输入要紧程序。

六、编译程序并装载。

拨码开关(小松鼠)

拨码开关(小松鼠)
使用水压传感器
伊斯曼主板拨码设置
拨码序号
功能说明
ON状态
OFF状态
1
气种选择
液化气
天然气
2
类型先择
板换式
套管式
3
采暖方式
散热片40~85℃
地暖35~60℃
4
水流开关类型选择
开关型频率型ຫໍສະໝຸດ 5采暖待机水泵运行状态
一直运行
运行4分钟停4分钟
6
采暖启动温度
低于设定15℃
低于设定25℃
7
采暖燃烧方式
稳火燃烧
到设定温度延时3分钟即停
到设定温度延时3分钟即停
8
运行状态
正常运行
测试状态
小松鼠壁挂炉主控电路板拨码设置
宏马主板拨码设置
拨码
序号
功能说明
ON状态
OFF状态
1
气种选择
液化气
天然气
2
类型先择
板换式
套管式
3
采暖方式
散热片40~85℃
地暖35~60℃
4
水流开关类型选择
开关型
频率型
5
保留
---
---
6
采暖启动温度
低于设定15℃
低于设定25℃
7
采暖燃烧方式
稳火燃烧
到设定温度延时3分钟即停
8
运行状态
正常运行
测试状态
前期主板使用
拨码序号
功能说明
ON状态
OFF状态
1
气种选择
液化气
天然气
2
类型先择
板换式
套管式
3
采暖方式
散热片40~85℃
地暖35~60℃

数字电路实验

数字电路实验

数字电路实验实验⼀:数字实验箱的基本操作⼀、实验⽬的1、熟悉数字电路实验箱的结构、基本功能和使⽤⽅法。

2、理解数字电路及数字信号的特点。

3、掌握数字电路的基本搭建⽅法4、熟悉数字电路实验的操作要求和规范。

⼆、实验设备与仪器数字电路实验箱、数字式万⽤表。

三、实验原理1、七段显⽰译码器——CC4511引脚图如图1-1⽰。

V DD f g a b c d e图1-1 七段显⽰译码器——CC4511第8脚为负极,16脚为电源正极,A、B、C、D为BCD码输⼊端,a、b、c、d、e、f、g、h 为译码输出端,输出1有效,⽤于驱动共阴极LED数码管2、七段数码显⽰器(共阴极)结构图如下图所⽰。

四、实验内容及⽅法1、熟悉数字实验箱的组成和各部分的基本作⽤。

2、将实验箱中的四组拨码开关的输出A i、B i、C i、D i分别接⾄CC4511的对应输⼊⼝,接上+5V电源,然后按功能表的要求揿动四个数码的增减键和操作三个开关,观测盘上的四位数与LED数码管显⽰的对应数字是否⼀致,以及译码显⽰是否正常,记⼊表4.10。

五、实验思考题1.拨码开关的输出A i、B i、C i、D i的优先级别是怎么排列的,⽽CC4511的对应输⼊⼝A、B、C、D的优先级别⼜是怎么样的。

六、总结实验⼆、组合逻辑电路的设计与测试(1)(利⽤⼩规模集成芯⽚)⼀、实验⽬的1、掌握组合逻辑电路的分析和设计⽅法。

2、学习并掌握⼩规模芯⽚(SSI)的基本测试⽅法及实现各种组合逻辑电路的⽅法。

3、学习⽤仪器检测故障,排除故障。

⼆、实验设备与仪器数字电路实验箱、数字式万⽤表、74LS00⼀⽚(四2输⼊与⾮门)、74LS20(⼆4输⼊与⾮门)两⽚。

三、实验原理1.分析逻辑电路的⽅法:根据逻辑电路图---写出逻辑表达式---化简逻辑表达式(公式法、卡诺图法)---画出逻辑真值表---分析得出逻辑电路解决的实际问题(逻辑功能)。

2.设计组合电路的⼀般步骤如图2-1所⽰。

(整理)拨码开关控制实验电路图

(整理)拨码开关控制实验电路图

拨码开关控制实验电路图流程图/* 基本开关控制实验 *///==宣告区=================================#include <reg51.h> //定义8051头文件,引入reg52.h#define SW P2//定义开关接至P2#define LED P1//定义LED接至P 1//==主程式=================================main()//主程序开始{ SW=0xff;//规划输入端口while(1)//无穷循环,程式一直跑LED=SW;//读取开关(P2)状态,输出到LED(P1)}//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若希望拨码开关中的S1、S3、S5三个开关都on,则前四个LED 亮;S2 或 S4 或 S6开关 on,则后四个LED 亮;S7及 S8 开关 on,则所有LED全亮,程序应如何编写?若将拨码开关换成一般家里墙壁上的开关,而LED换成继电器(RELAY),是否可作为家里的负载控制?按钮ON-OFF控制实验按钮ON-OFF 控制实验电路图流程图如下:/* 基本按钮ON-OFF控制实验*///==声明区======================================= #include<reg51.h>//定义8051头文件,引入reg52.h sbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1sbit LED=P1^0;//声明LED为P1.0//==主程式======================================= main()//主程序开始{ LED=1;//关闭LEDPB1=PB2=1;//规划输入端口while(1)//无穷循环,程式一直跑{if (PB2==0)LED=1;//若按下PB2,则关闭LEDelse if (PB1==0)LED=0;//若按下PB1,则点亮LED}//while循环结束}//结束程序思考一下!在本实验里,有没有“抖动”的困扰?若将按钮开关当成启动电机的ON-OFF开关,而LED换成继电器(RELAY),是否可作为电机控制?若同时按下PB1 与PB2按钮会怎样?按钮切换式控制实验按钮切换式控制实验电路图流程图实验代码:/* 按钮切换式控制实验*///==声明区===================================== #include<reg51.h>//定义8051头文件,引入reg52.h sbit PB1=P2^0;//声明PB1接至P2.0sbit LED=P1^0;//声明LED接至P1.0void debouncer(void);//声明防弹跳函数//==主程序===================================== main()//主程式开始{ LED=1;//关闭LEDPB1=1;//规划P2.0为输入埠while(1)//无穷循环,程序一直跑{ if (PB1==0)//若按下PB1{ debouncer();//呼叫防弹跳函数(按下时)LED=!LED;//切换LED为反相while(PB1 != 1);//若仍按住PB1,继续等debouncer();//呼叫防弹跳函数(放开时)}//if叙述结束}//while循环结束}//主程序结束//==子程序=====================================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变数ifor(i=0;i<2400;i++);//计数2400次,延迟约20ms}//防弹跳函数结束思考一下!在本实验里,改变debouncer函数的时间长短,看看有什么影响?若按住PB1不放会怎样?如何改善?按钮开关应用电路图流程图代码如下:/* 按钮开关应用(两按钮控制七段显示器上下数) *///==声明区==========================================#include<reg51.h>//定义8051头文件,引入reg52.h文件#define SEG P0//定义七节显示器接至P0端口/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//数字0-9sbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1void debouncer(void);//声明防弹跳函数//==主程式=================================main()//主程序开始{ unsigned char i=0;//声明变量i初值=0PB1=PB2=1;//规划输入端口SEG=TAB[i];//输出数字至七段显示器while(1)//无穷循环,程式一直跑{ if (PB1==0)//判断PB1是否按下{ debouncer();//呼叫防弹跳函数i= (i<9)? i+1:0;//若i<9则i=i+1,若i>=9清除为0SEG=TAB[i]; //输出数字至七段显示器while(PB1==0); //PB1是否按住?debouncer(); //呼叫防弹跳函数}//if叙述结束if (PB2==0)//判断PB2是否按下{ debouncer();//呼叫防弹跳函数i= (i>0)? i-1:9;//若i>0则i=i-1,i<=0重设为9SEG=TAB[i];//输出数字至七段显示器while(PB2==0);//PB1是否按住?debouncer();//呼叫防弹跳函数}//if叙述结束}//while循环结束}//主程序结束//==子程序==================================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变量ifor(i=0;i<2400;i++);//计数2400次,延迟约20ms}//防弹跳函数结束思考一下!在本实验里,若按钮按住不放,会怎样?如何改善?在本实验里,若PB1与PB2两个按钮同时按,会怎样?BCD数字型拨码开关实验BCD数字型拨码开关实验电路图流程图实验代码:/* BCD数字型指拨开关实验*///==声明区======================================#include<reg51.h>//定义8051头文件,引入reg52.h文件#define SEG P0//定义七节显示器接至P0#define SW P2//定义开关接至P2/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//数字0-9#define SW_H() SW&0x0f//读取开关值(P2清除高4bits)//==主程序======================================main()//主程序开始{ SW=0xff;//规划输入埠while(1)//无穷循环,程序一直跑SEG=TAB[SW_H()];//读取开关值,输出至七节显示器(P0)}//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若把本单元的BCD数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?多重按钮开关实验多重按钮开关实验电路图流程图实验中的自编库函数/* myio.h自己写的程序库*///==声明区============================== #define LED P1//定义LED接至P1void debouncer(void);//声明防弹跳函数void delay10ms(int);//声明10毫秒延迟函数void alter(int);//声明交互闪烁函数void left(int);//声明单灯左移函数void right(int);//声明单灯右移函数void pili(int); //声明霹雳灯函数void flash(int);//声明闪烁函数//==自己写的子程序========================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ delay10ms(2);//延迟约20ms}//防弹跳函数结束/* 延迟函数开始,延迟约x 10ms */void delay10ms(int x)//延迟函数开始{ int i,j;//声明整数变量i,jfor (i=0;i<x;i++)//计数x次,延迟约x 10msfor (j=0;j<1200;j++);//计数1200次,延迟约10ms }//延迟函数结束/* 高低位元交互闪烁函数,执行x次*/void alter(int x)//高低位元交互闪烁函数开始{ int i;//声明变量iLED=0x0f;//初始状态(高位元亮,低位元灭)for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次{ delay10ms(50);//延迟50*10m=0.5sLED=~LED;//LED反相输出}//i变量for循环结束delay10ms(50);//延迟50 10m=0.5s}//高低位元交互闪烁函数结束/* 全灯闪烁函数,执行x次*/void flash(int x)//全灯闪烁函数开始{ int i;//声明变量iLED=0x00;//初始状态(全亮)for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次{ delay10ms(50);//延迟50 10m=0.5sLED=~LED;//P0反相输出}//i变量for循环结束delay10ms(50);//延迟50 10m=0.5s}//全灯闪烁函数结束/* 单灯左移函数,执行x圈*/void left(int x)//单灯左移函数开始{ int i, j;//声明变量i,jfor(i=0;i<x;i++)//i循环,执行x圈{ LED=0xfe;//初始状态=1111 1110for(j=0;j<7;j++)//j循环,左移7次{ delay10ms(25);//延迟25 10m=0.25sLED=(LED<<1)|0x01;//左移1位後,LSB设为1 }//j循环结束delay10ms(25);//延迟25 10m=0.25s}//i循环结束*/}//单灯左移函数结束/* 单灯右移函数,执行x圈*/void right(int x)//单灯右移函数开始{ int i, j;//声明变量i,jfor(i=0;i<x;i++)//i循环,执行x圈{ LED=0X7f;//初始状态=0111 1111for(j=0;j<7;j++)//j循环,右移7次{ delay10ms(25);//延迟25 10m=0.25sLED=(LED>>1)|0x80;//左移1位後,MSB设为1 }//j循环结束delay10ms(25);//延迟25 10m=0.25s}//i循环结束}//单灯左移函数结束/* 霹雳灯函数,执行x圈*/void pili(int x)//霹雳灯函数开始{ int i;//声明变量ifor(i=0;i<x;i++)//i循环,执行x圈{ left(1);//单灯左移一圈right(1);//单灯左移一圈}//i循环结束}//霹雳灯函数结束多重按钮开关实验之一:代码/* 多重按钮开关实验之1 *///==声明区================================#include<reg52.h>//定义8051头文件,引入reg52.h文件#include"myio.h"//自己写的I/O程序库sbit PB1=P2^0;//声明PB1=P2.0sbit PB2=P2^1;//声明PB2=P2.1sbit PB3=P2^2;//声明PB3=P2.2sbit PB4=P2^3;//声明PB4=P2.3//==主程序================================ main()//主程序开始{ LED=0xff;//初始状态(LED全灭)P2=0xff;//规划P2输入端口while(1)//无穷循环,程序一直跑{ if (PB1==0)//如果按下PB1{ debouncer();//防弹跳alter(3);//高低位元交互闪烁三次flash(3);}//全灯闪烁三次else if (PB2==0)//如果按下PB2{ debouncer();//防弹跳left(3);//单灯左移三圈flash(3);}//全灯闪烁三次else if (PB3==0)//如果按下PB3{ debouncer();//防弹跳right(3);//单灯右移三圈flash(3);}//全灯闪烁三次else if (PB4==0)//如果按下PB4{ debouncer();//防弹跳pili(3);//霹雳灯三圈flash(3);}//全灯闪烁三次}//while循环结束}//主程序结束思考一下!在本实验里,若同时按下多个按钮会如何?在本实验里,若按住按钮不放会如何?在本实验里,其中debouncer函数是个延迟20毫秒的函数,而delay10ms函数是个延迟10毫秒的函数,可否使用delay10ms 函数取代debouncer函数?如何修改?在本实验里,其中alter函数是个高四位与低四位交替闪烁的函数,而flash函数是个8灯闪烁的函数,其不同在于其初始值。

单片机拨码开关实训报告

单片机拨码开关实训报告

一、实训背景随着电子技术的飞速发展,单片机作为现代电子系统中的核心控制部件,其应用领域日益广泛。

为了提高学生对单片机应用技术的理解和实践能力,我们开展了单片机拨码开关实训。

本次实训旨在通过实际操作,让学生熟悉单片机的硬件组成、软件编程以及系统调试,掌握单片机控制拨码开关的基本方法。

二、实训目的1. 理解单片机的硬件结构和工作原理。

2. 掌握Keil C51集成开发环境的使用方法。

3. 学会编写简单的单片机程序,实现拨码开关的控制功能。

4. 提高动手能力和团队合作精神。

三、实训内容1. 硬件准备- 单片机开发板(例如:STC89C52)- 拨码开关模块- 连接线- 电源- 示波器或逻辑分析仪(可选)2. 软件准备- Keil C51集成开发环境- 单片机编程软件(例如:Proteus)3. 实训步骤1. 硬件连接- 将单片机的P1端口与拨码开关模块的输入端相连。

- 将单片机的VCC和GND与电源相连。

- 将示波器或逻辑分析仪连接到单片机的P1端口,用于观察信号变化。

2. 软件编写- 在Keil C51中创建一个新项目,选择相应的单片机型号。

- 编写程序,读取拨码开关的状态,并根据状态控制LED灯的亮灭。

- 以下是程序示例:```c#include <reg52.h>void main() {while (1) {if (P1 == 0x00) {P2 = 0x01; // LED灯亮} else if (P1 == 0xFF) {P2 = 0x00; // LED灯灭}}}```3. 程序下载与调试- 使用Proteus或其他仿真软件进行程序下载和调试。

- 观察拨码开关状态变化时,LED灯的响应情况,确保程序正常运行。

4. 实际测试- 将程序下载到单片机开发板上,进行实际测试。

- 通过手动操作拨码开关,观察LED灯的亮灭情况,验证程序的正确性。

四、实训心得1. 通过本次实训,我对单片机的硬件结构和软件编程有了更深入的了解,掌握了单片机控制拨码开关的基本方法。

拨码开关控制流水灯实作报告

拨码开关控制流水灯实作报告

《拨码开关控制流水灯》实作报告班级:姓名:一、任务描述:利用一只拨码开关控制流水灯的流动方向。

拨码开关往上拨动时,流水灯自左往右流动,拨码开关往下拨动时,流水灯自右往左流动。

流动速度不限。

往上拨动往下拨动二、要完成本次任务,你需要把以下问题搞清楚:1、硬件连接:根据任务描述,共需要根导线连接LED灯,根导线连接拨码开关。

共需要根导线。

2、程序设计:(1)实验箱上拨码开关往上拨动时输出电平,用数字来表示。

往下拨动时输出电平,用数字来表示。

(2)本例程序(需要/不需要)导入头文件<reg51.h>?提示:是否用到了I/O口,P0、P1、P2或P3)本例程序(需要<intrins.h>?提示:是否需要移位,有要求做流水灯效果吗?)本例程序(需要(5)本例程序对流水灯流动速度不作要求,(需要/不需要)延时子函数。

(6)本例程序(需要/不需要)对某些引脚进行位定义(单独使用)?有的话,是哪些脚?(7)利用(if/while/for)基本语句和逻辑运算符来判断拨码开关当前状态是往上拨动,还是往下拨动;利用(if/while/for)基本语句来反复扫描拨码开关的状态。

(8)流水灯的三要素是:P1=a;yanshi(数值);数值大小决定的led的a=_cror_(a,1);或=_crol_(a,1);3、把程序补充完整(假定拨码开关接P2.0脚,LED接P1脚)#include< > //导入头文件,方便寻址//# include< > //导入头文件,便于使用移位指令//#define unsigned int //宏定义,简化程序//void yanshi(uint); //声明子函数//sbit k= ; //位定义单独使用的引脚//uint a=0x ; //设置流水灯初值//void main() //主函数//{(1) //死循环//{if(k= = ) //判断拨码开关状态//{P1= ; //将a值送给P1口//yanshi( ); //延时//a=_crol_(a,1); //a向左移动一位//}if(k= = ) //判断拨码开关状态//{P1= ; //将a值送给P1口//yanshi( ); //延时//a=_cror_(a,1); // a向右移动一位//}}}void yanshi(uint x) //延时子函数//{uint i,j;for(i=x;i>0;i--)for(j= ;j>0;j--);}。

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

拨码开关控制实验电路图流程图/* 基本开关控制实验 *///==宣告区=================================#include <reg51.h> //定义8051头文件,引入reg52.h#define SW P2//定义开关接至P2#define LED P1//定义LED接至P 1//==主程式=================================main()//主程序开始{ SW=0xff;//规划输入端口while(1)//无穷循环,程式一直跑LED=SW;//读取开关(P2)状态,输出到LED(P1)}//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若希望拨码开关中的S1、S3、S5三个开关都on,则前四个LED 亮;S2 或 S4 或 S6开关 on,则后四个LED 亮;S7及 S8 开关 on,则所有LED全亮,程序应如何编写?若将拨码开关换成一般家里墙壁上的开关,而LED换成继电器(RELAY),是否可作为家里的负载控制?按钮ON-OFF控制实验按钮 ON-OFF 控制实验电路图流程图如下:/* 基本按钮 ON-OFF控制实验 *///==声明区======================================= #include<reg51.h>//定义8051头文件,引入reg52.h sbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1sbit LED=P1^0;//声明LED为P1.0//==主程式======================================= main()//主程序开始{ LED=1;//关闭LEDPB1=PB2=1;//规划输入端口while(1)//无穷循环,程式一直跑{if (PB2==0)LED=1;//若按下PB2,则关闭LEDelse if (PB1==0)LED=0;//若按下PB1,则点亮LED}//while循环结束}//结束程序思考一下!在本实验里,有没有“抖动”的困扰?若将按钮开关当成启动电机的 ON-OFF开关,而 LED换成继电器(RELAY),是否可作为电机控制?若同时按下 PB1 与 PB2按钮会怎样?按钮切换式控制实验按钮切换式控制实验电路图流程图实验代码:/* 按钮切换式控制实验 *///==声明区===================================== #include<reg51.h>//定义8051头文件,引入reg52.h sbit PB1=P2^0;//声明PB1接至P2.0sbit LED=P1^0;//声明LED接至P1.0void debouncer(void);//声明防弹跳函数//==主程序===================================== main()//主程式开始{ LED=1;//关闭LEDPB1=1;//规划P2.0为输入埠while(1)//无穷循环,程序一直跑{ if (PB1==0)//若按下PB1{ debouncer();//呼叫防弹跳函数(按下时)LED=!LED;//切换LED为反相while(PB1 != 1);//若仍按住PB1,继续等debouncer();//呼叫防弹跳函数(放开时)}//if叙述结束}//while循环结束}//主程序结束//==子程序=====================================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变数ifor(i=0;i<2400;i++);//计数2400次,延迟约20ms}//防弹跳函数结束思考一下!在本实验里,改变 debouncer函数的时间长短,看看有什么影响?若按住 PB1不放会怎样?如何改善?按钮开关应用电路图流程图代码如下:/* 按钮开关应用(两按钮控制七段显示器上下数) *///==声明区==========================================#include<reg51.h>//定义8051头文件,引入reg52.h文件#define SEG P0//定义七节显示器接至P0端口/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98} ;//数字0-9sbit PB1=P2^0;//声明按钮1接至P2.0sbit PB2=P2^1;//声明按钮2接至P2.1void debouncer(void);//声明防弹跳函数//==主程式=================================main()//主程序开始{ unsigned char i=0;//声明变量i初值=0PB1=PB2=1;//规划输入端口SEG=TAB[i];//输出数字至七段显示器while(1)//无穷循环,程式一直跑{ if (PB1==0)//判断PB1是否按下{ debouncer();//呼叫防弹跳函数i= (i<9)? i+1:0;//若i<9则i=i+1,若i>=9清除为0SEG=TAB[i]; //输出数字至七段显示器while(PB1==0); //PB1是否按住?debouncer(); //呼叫防弹跳函数}//if叙述结束if (PB2==0)//判断PB2是否按下{ debouncer();//呼叫防弹跳函数i= (i>0)? i-1:9;//若i>0则i=i-1,i<=0重设为9SEG=TAB[i];//输出数字至七段显示器while(PB2==0);//PB1是否按住?debouncer();//呼叫防弹跳函数}//if叙述结束}//while循环结束}//主程序结束//==子程序==================================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ int i;//声明整数变量ifor(i=0;i<2400;i++);//计数2400次,延迟约20ms}//防弹跳函数结束思考一下!在本实验里,若按钮按住不放,会怎样?如何改善?在本实验里,若 PB1与 PB2两个按钮同时按,会怎样?BCD数字型拨码开关实验BCD数字型拨码开关实验电路图流程图实验代码:/* BCD数字型指拨开关实验 *///==声明区======================================#include<reg51.h>//定义8051头文件,引入reg52.h文件#define SEG P0//定义七节显示器接至P0#define SW P2//定义开关接至P2/* 声明七节显示器驱动信号阵列(共阳) */char codeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98} ;//数字0-9#define SW_H() SW&0x0f//读取开关值(P2清除高4bits)//==主程序======================================main()//主程序开始{ SW=0xff;//规划输入埠while(1)//无穷循环,程序一直跑SEG=TAB[SW_H()];//读取开关值,输出至七节显示器(P0)}//主程序结束思考一下!在本实验里,有没有“抖动”的困扰?若把本单元的BCD数字型拨码开关,改为16进位数字型拨码开关,程序应如何修改?多重按钮开关实验多重按钮开关实验电路图流程图实验中的自编库函数/* myio.h自己写的程序库 *///==声明区============================== #define LED P1//定义LED接至P1void debouncer(void);//声明防弹跳函数void delay10ms(int);//声明10毫秒延迟函数void alter(int);//声明交互闪烁函数void left(int);//声明单灯左移函数void right(int);//声明单灯右移函数void pili(int); //声明霹雳灯函数void flash(int);//声明闪烁函数//==自己写的子程序========================/* 防弹跳函数函数,延迟约20ms */void debouncer(void)//防弹跳函数开始{ delay10ms(2);//延迟约20ms}//防弹跳函数结束/* 延迟函数开始,延迟约x 10ms */void delay10ms(int x)//延迟函数开始{ int i,j;//声明整数变量i,jfor (i=0;i<x;i++)//计数x次,延迟约x 10msfor (j=0;j<1200;j++);//计数1200次,延迟约10ms }//延迟函数结束/* 高低位元交互闪烁函数,执行x次 */void alter(int x)//高低位元交互闪烁函数开始{ int i;//声明变量iLED=0x0f;//初始状态(高位元亮,低位元灭)for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次{ delay10ms(50);//延迟50*10m=0.5sLED=~LED;//LED反相输出}//i变量for循环结束delay10ms(50);//延迟50 10m=0.5s}//高低位元交互闪烁函数结束/* 全灯闪烁函数,执行x次 */void flash(int x)//全灯闪烁函数开始{ int i;//声明变量iLED=0x00;//初始状态(全亮)for(i=0;i<2*x-1;i++)//i变量for循环执行2x-1次{ delay10ms(50);//延迟50 10m=0.5sLED=~LED;//P0反相输出}//i变量for循环结束delay10ms(50);//延迟50 10m=0.5s}//全灯闪烁函数结束/* 单灯左移函数,执行x圈 */void left(int x)//单灯左移函数开始{ int i, j;//声明变量i,jfor(i=0;i<x;i++)//i循环,执行x圈{ LED=0xfe;//初始状态=1111 1110for(j=0;j<7;j++)//j循环,左移7次{ delay10ms(25);//延迟25 10m=0.25sLED=(LED<<1)|0x01;//左移1位後,LSB设为1 }//j循环结束delay10ms(25);//延迟25 10m=0.25s}//i循环结束*/}//单灯左移函数结束/* 单灯右移函数,执行x圈 */void right(int x)//单灯右移函数开始{ int i, j;//声明变量i,jfor(i=0;i<x;i++)//i循环,执行x圈{ LED=0X7f;//初始状态=0111 1111for(j=0;j<7;j++)//j循环,右移7次{ delay10ms(25);//延迟25 10m=0.25sLED=(LED>>1)|0x80;//左移1位後,MSB设为1 }//j循环结束delay10ms(25);//延迟25 10m=0.25s}//i循环结束}//单灯左移函数结束/* 霹雳灯函数,执行x圈 */void pili(int x)//霹雳灯函数开始{ int i;//声明变量ifor(i=0;i<x;i++)//i循环,执行x圈{ left(1);//单灯左移一圈right(1);//单灯左移一圈}//i循环结束}//霹雳灯函数结束多重按钮开关实验之一:代码/* 多重按钮开关实验之1 *///==声明区================================#include<reg52.h>//定义8051头文件,引入reg52.h文件#include"myio.h"//自己写的I/O程序库sbit PB1=P2^0;//声明PB1=P2.0sbit PB2=P2^1;//声明PB2=P2.1sbit PB3=P2^2;//声明PB3=P2.2sbit PB4=P2^3;//声明PB4=P2.3//==主程序================================ main()//主程序开始{ LED=0xff;//初始状态(LED全灭)P2=0xff;//规划P2输入端口while(1)//无穷循环,程序一直跑{ if (PB1==0)//如果按下PB1{ debouncer();//防弹跳alter(3);//高低位元交互闪烁三次flash(3);}//全灯闪烁三次else if (PB2==0)//如果按下PB2{ debouncer();//防弹跳left(3);//单灯左移三圈flash(3);}//全灯闪烁三次else if (PB3==0)//如果按下PB3{ debouncer();//防弹跳right(3);//单灯右移三圈flash(3);}//全灯闪烁三次else if (PB4==0)//如果按下PB4{ debouncer();//防弹跳pili(3);//霹雳灯三圈flash(3);}//全灯闪烁三次}//while循环结束}//主程序结束思考一下!在本实验里,若同时按下多个按钮会如何?在本实验里,若按住按钮不放会如何?在本实验里,其中debouncer函数是个延迟20毫秒的函数,而delay10ms函数是个延迟 10毫秒的函数,可否使用delay10ms 函数取代 debouncer函数?如何修改?在本实验里,其中alter函数是个高四位与低四位交替闪烁的函数,而flash函数是个8灯闪烁的函数,其不同在于其初始值。

相关文档
最新文档