循环灯实验报告与代码
左右来回循环的流水灯实验报告

青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01信息科学技术学院 计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。
而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
能够通过按键控制8个LED小灯从左到右依次点亮。
关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
指示灯循环控制实验报告

系别
计算机系
班级
B140502
学号
B14050226
姓名
韩亚辉
课程名称
单片机原理及应用
实验日期
2016-3-25
实验名称
指示灯循环控制
成绩
实验目的:熟悉μVision3编译软件,掌握C51编程与调试方法。
实验条件:计算机一台、ISIS、Proteus软件
实验内容:
(1)熟悉μVision3编译软件,了解软件结构与功能;
(2)完成实验3的C51语言编程;
(3)掌握在μVision3中进行C51程序开发的方法。
实验骤:
一、实验原件清单
二、根据原理图画出的实验图
三、实验程序如下:
#include "reg51.h"
char led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void delay(unsigned int time)
{unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main( )
{char i;
while(1)
{ for(i=0;i<8;i++)
{ P0=led[i];
delay(500);
}
for(i=7;i>=2;i--)
{ P0=led[i-1];
delay(500) ;
}
}
}
四、仿真结果如下图:
实验总结:
这次上机实验使我对于Keil C编译软件更加熟悉,对该软件能够熟练操作,并加深了我对C51单片机的学习,并能够会编写操作指示灯循环所需要的程序。通过的上机实验让我对于单片机实验产生浓厚的兴趣,并且让我对于其单片机知识掌握更加扎实。
单片机实验报告——LED灯控制器

《微机实验》报告LED灯控制器指导教师:专业班级::学号:联系方式:一、任务要求实验目的:加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。
实验内容:利用C8051F310单片机设计一个LED灯控制器主要功能和技术指标要求:1. LED灯外接于P0.0端。
2. LED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s。
3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。
4. 利用单片机内部定时器定时,要求采用中断方式。
提高要求:使用按键(KINT)控制LED灯闪烁模式的切换。
二、设计思路C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,所以T1定时器采用定时方式1,单次定时最长可以达到的时间为1.027s,可以满足0.5Hz是的定时要求。
基础部分:给TMOD赋值10H,即选用T1定时器采用定时方式1,三种频率对应的半周期时间为0.25s、0.5s、1s。
计算得需给TH1和TL1为C1H、B1H;83H、63H;06H、C6H。
要使闪烁持续10s,三种模式需要各循环40、20、10次。
用LOOP3:MOV C,PSW.5 ;PSW.5为标志位,进定时器中断后置一JNC LOOP3代替踏步程序等待中断,以便中断完后回到主程序继续向下执行。
为了减少代码长度,可以采用循环结构,循环主题中,将R1、R2分别赋给TH1、TL1,R7为循环次数(用DJNZ语句实现);定时中断里,重新给TH1、TL1赋值时同理。
这样,循环时只要把定时时间和循环次数赋给R1、R2、R7即可,达到减少代码长度的效果。
蜂鸣器也采用T1定时方式1,定时一秒。
提高部分:采用外部中断0,下降沿触发。
外部中断程序里置标志位PSW.1和R0,PSW.5用于判断执行完一种模式后,是否跳出循环结束。
R0用于判断执行何种模式,每按一次后RO 加一,第四次时就将R0和PSW.5清零,这样程序就又回到了基础部分的循序执行。
循环彩灯控制系统实验报告

循环彩灯控制系统实验报告一、设计要求1、程序中由3个按钮控制每按下一个按钮都会出现不同的彩灯循环现象二、硬件电路设计1、单片机最小系统(2)发光二极管的电路三、软件设计(一)1、在Keil uVision4.LNK上写好程序后通过STC_ISP_V480.exe.lnk和USB口输入到reg52.h单片机中按下开关蓝色指示灯亮,然后按下P3^7按钮发光二极管从左往右依次点亮;2、①在不复位的情况下按下P3^6时发光二极管可以做往返运动依次点亮②在复位时按下P3^6发光二极管是从右往左依次点亮的;3、①在不复位的情况下按下P3^5时发光二极管可以在从左往右或者从右往左点亮后1,3,5,7与2,4,6,8交替闪烁(在看先点亮P3^6还是P3^5 来实现从左还是从右开始循环)②在复位时按下P3^5发光二极管是作1,3,5,7与2,4,6,8交替闪烁。
(二)说明(“0”“1”“2”“3”“4”“5”“6”“7”按键P3^7 0X7F 0XBF 0XDF 0XEF 0XF7 0XFB 0XFD 0XFE 复位P3^6 0XFE 0XFD 0XFB 0XF7 0XEF 0XDF 0XBF 0X7F 复位P3^5 0X7F/0XFF 0XFF/0XBF0XDF/0XFF0XFF/0XEF0XF7/0XFF0XFF/0XFB0XFD/0XFF0XFF/0XFE复位8421码10=A 11=B 12=C 13=D 14=E 15=F四、系统测试步骤1:新建工程→New Project→选择单片机型号→Atmel→AT89C52取名→保存2:新建文档→New file→取名→保存(—3个按键控制两种LED现象.C)3:点右键→Add file to group→选择(—3个按键控制两种LED现象.C)4:点工程右键→options “output”(√)create hex file5产出hex档→编译按钮(↓)(↓↓)(↓↓↓)STC下载软件1:选择单片机型号“STC89C52RC”2:打开文件→(流水灯.hex)3:选择COM口(裝置管理員)4:点下载按鈕→开启电源按钮→“OK 已加密”附录源程序清单#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1 =P3^7; //第一个按键sbit key2 =P3^6; //第二歌按键sbit key3 =P3^5; //第三个按键uchar A1=0,A2=0,A3=0;void delay(uint z){uint i,j;for(i=0;i<z;i++)for(j=0;j<110;j++);}void O_to_E() //1,3,5,7与2,4,6,8交替闪烁{P0=0Xaa;delay(200);P0=~0Xaa;delay(200);}{if(!key1){delay(10); //延时if(!key1)A1=1;}if(!key2){delay(10); //延时if(!key2)A2=1;}if(!key3){delay(10); //延时if(!key3)A3=1;}}void main(){uchar i;while(1){if(A1){for(i=0;i<8;i++) //从左往右亮,每盏灯亮一次{P0=~(0x7f>>i);delay(100);}}if(A2){for(i=0;i<8;i++) //从右往左亮,每盏灯亮一次{P0=~(0xfe<<i);delay(100);}}if(A3){O_to_E(); //1,3,5,7与2,4,6,8交替闪烁}}}附加图片(因为手机问题从左往右跟从右往左还有左右往返的看不出来所以就拍了2张图片)1、从左往右、从右往左、往返2、//1,3,5,7与2,4,6,8交替闪烁超。
单个按键控制4个LED 实验报告(带程序)

单个按键控制4个LED(入门级实验)实验介绍:通过单个按键控制4个LED灯的亮灭状态。
正常情况下,一个按键控制1个灯。
在本次实验中,要求使用1个按键,控制4个LED灯。
通过按键按下的次数,控制LED的亮灭状态。
按下1次,1个LED灯点亮,按下2次,2个LED 灯点亮,按下3次,3个LED灯点亮,按下4次,4个LED灯点亮,按下5次,所有LED灯都熄灭,如此循环。
如此就可以通过单个按键控制4个LED灯的亮灭。
在照明场所,控制LED灯的点亮个数,就可以控制亮度。
实验目的:在使用单片机等控制器控制周边元件的时候,经常会遇到I/O口不够用的情况。
因此在使用的时候,尽量省着用。
本次实验通过单个按键控制4个LED灯的亮灭状态,正常情况下需要4个按键,因而达到了节省单片机I/O口的目的。
通过此次实验室,学习单片机按键的编程控制方法,学习LED灯输出的控制方法。
学习最简单的输入设备(按键)控制最简单的输出设备(LED灯)的控制方法。
仿真原理图:在仿真软件Proteus中绘制仿真原理图如上图所示。
(注意事项:在进行实物制作时,发光二极管串联的电阻可以省略,因为单片机引脚灌电流的能力有限,限制了通过发光二极管电流的大小。
在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。
)编程思路:当单片机上电后,所有的I/O口默认高电平,因而四个发光二极管在单片机上电后,都为熄灭状态。
此时,我们按下按键后,就可以调节各个发光二极管的亮灭状态。
当按一次按钮,将P2口的状态进行左移一位,同时将P2的最低位清零,就可以达到按一次按钮后,LED灯多亮一个。
如,当前只有P2口控制的最低位连接的LED点亮,当我们按一次按键,单片机首先将P2的状态循环左移一位,则刚才的最低位变为次低位,也就是倒数第二位点亮,同时将P2口的最低位清零,也就是倒数第一位连接的LED灯点亮,即按一次按钮后,倒数第一位和倒数第二位灯点亮。
其他状态与上述过程类似,这里不再赘述。
实验三流水灯实验(io口和定时器实验)

实验三流水灯实验(I/O口和定时器实验)一、实验目的1.学会单片机I/O口的使用方法和定时器的使用方法;2.掌握延时子程序的编程方法、内部中断服务子程序的编程方法;3.学会使用I/O口控制LED灯的应用程序设计。
二、实验内容1.控制单片机P1口输出,使LED1~LED8右循环轮流点亮(即右流水),间隔时间为100毫秒。
2.控制单片机P1口输出,使LED1~LED8左循环轮流点亮(即左流水),间隔时间为100毫秒。
3.使用K1开关控制上面LED灯的两种循环状态交替进行;4. 用定时器使P1口输出周期为100ms的方波,使LED闪烁。
5.使用定时器定时,使LED灯的两种循环状态自动交替,每一种状态持续1.6秒钟(选作)。
三、实验方法和步骤1.硬件电路设计使用实验仪上的E1、E5和E7模块电路,把E1区的JP1(单片机的P1口)和E5区的8针接口L1~L8(LED的驱动芯片74HC245的输入端)连接起来,P1口就可以控制LED 灯了。
当P1口上输出低电平“0”时,LED灯亮,反之,LED灯灭。
E7区的K1开关可以接单片机P3.0口,用P3.0口读取K1开关的控制信号,根据K1开关的状态(置“1”还是置“0”),来决定LED进行左流水还是右流水。
综上,画出实验电路原理图。
2.程序设计实验1和实验2程序流程图如图3-1实验3程序流程图如图3-2所示。
图3-1 实验1,2程序流程图图3-2 实验3程序流程图实验4程序流程图如图3-3,3-4所示。
实验5程序流程图如图3-5,3-6所示。
图3-5 实验5主程序流程图图3-6 定时器中断服务子程序流程图图3-4 定时器中断服务子程序流程图图3-3 实验4主程序流程图编程要点:(1)Pl,P3口为准双向口,每一位都可独立地定义为输入或输出,在作输入线使用前,必须向锁存器相应位写入“1”,该位才能作为输入。
例如:MOV P1,A; P1口做输出MOV P1,#0FFHMOV A,P1;P1口做输入SETB P3.0MOV C,P3.1;从P3.1口读入数据(2)每个端口对应着一个寄存器,例:P1→90H(P1寄存器地址);P3→B0H(P3寄存器地址);寄存器的每一位对应着一个引脚,例:B0H.0→P3.0(3)对寄存器写入“0”、“1”,对应的外部引脚则输出“低电平”、“高电平”。
流水灯实验报告

实验一流水灯实验一、实验目的1)简单I/O引脚的输出2)掌握软件延时编程方法3)简单按键输入捕获判断二、实验实现的功能1)开机时点亮12发光二极管, 闪烁三下2)按照顺时针循环依次点亮发光二极管3)通过按键将发光二极管的显示由顺时针改为逆时针方式三、系统硬件设计单片机STC10F08XE 1片发光二极管led 红4个黄4个绿4个按键6个复位电路时钟电路如下图所示:四、系统软件设计#include<reg51.h>sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; void Delay(void){unsigned char i,j,k;for(i=10;i>0;i--)for(j=132;j>0;j--)for(k=150;k>0;k--); }Scan_Key(){ unsigned char FLAG=0;unsigned char n;n=(L1==0)||(L2==0)||(L3==0);if(n) { FLAG=1;}return FLAG; }main(){ unsigned char y,n,s=0,b=1,m=0;unsigned char c=1;unsigned char a[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char h[]={0xff,0x38,0x34,0x2f,0x1f};n=Scan_Key(); for(y=0;y<3;y++){ P2=0; P3=0; Delay(); Delay(); Delay();P2=0xff; P3=0xff; Delay(); Delay(); Delay(); }while(1) { while(1){ m=m+n; P3=0x3f; while(1){ for(;b<9;b++){ n=Scan_Key(); m=m+n;if((P3==0x3f)&&(m%2==0)){P2=a[b];Delay();}else { P2=0xff;break; }if(m%2==0) c=1; P2=0xff; }for(;c<5;c++){n=Scan_Key(); m=m+n;if((P2==0xff)&&(m%2==0)){ P3=h[c];Delay();}else { P3=0x3f;break;} }if(m%2==0) b=1; break; }if(m%2==1) break; }while(1){ for(;b>0;b--){n=Scan_Key(); m=m+n;if((P3==0x3f)&&(m%2==1)){P2=a[b];Delay(); } else{P2=0xff;break;} P2=0xff; }if(m%2==1) c=4; for(;c>0;c--){ n=Scan_Key(); m=m+n;if((P2==0xff)&&(m%2==1)){ P3=h[c]; Delay();}else { P3=0x3f;break;} P3=0x3f; }if(m%2==0) break;if(m%2==1) b=8; } } }五、实验过程中遇到的问题及解决方法问题1: 如何实现顺、逆时针依次点亮流水灯?解决: 利用循环右移_cror_(m,1)和循环左移_crol_(n,1)依次点亮。
三循环闪烁灯实验报告

项目:三循环闪烁灯系统一、实验目的1.通过对实际知识的掌握学会用其进行基本的电路设计。
2.熟悉、认知各器件的功能和作用。
3.掌握对电路的焊接和调试。
二、实验仪器电阻器(510Ω(R2、R4、R6),10KΩ(R1、R3、R5))*6发光二极管(LED红色)*3NPN三极管(S9013H(V1、V2)、S8050D(V3))*32P插针*1电解电容(容值:47μF,耐压值:16V(C1、C2、C3))*3电能万木板*1。
三、实验电路,工作原理①S9013H三极管,S8050D三极管是一种NPN型小功率三极管,具有电流放大和开关作用。
其实质是三极管能以基极电流微小的变化量来控制集电极电流较大的变化量。
具有把微弱信号放大成幅值较大的电信号,也用作无触点开关。
本次三极管的主要是利用“开关”功能,保证发光二极管的明灭。
②电解电容的作用1.通交流隔直流,通高频阻低频。
2.滤波作用,在电源电路中,整流电路将交流变成脉动的直流,而在整流电路之后接入一个较大容量的电解电容,利用其充放电特性,使整流后的脉动直流电压变成相对比较稳定的直流电压。
在实际中,为了防止电路各部分供电电压因负载变化而产生变化,所以在电源的输出端及负载的电源输入端接有数十至数百微法的电解电容。
3.耦合作用:在低频信号的传递与放大过程中,为防止前后两级电路的静态工作点相互影响,常采用电容藕合.为了防止信号中低频分量损失过大,一般采用容量较大的电解电容。
4.旁路作用,为交流电路中的某些元件提供低阻抗回路。
5.存储能量的作用,用在特定情况下释放所需要的电流。
6.调节谐振频率的作用,比如收音机电路,LC晶振电路。
本次主要利用电容的充放电特性是发光二极管产生接连明灭的“流水灯”效果。
③电阻器的作用是限制电流大小,防止电流过大导致元器件损坏。
工作原理本电路是由3只三极管组成的循环驱动电路。
每当电源接通时,3只三极管会争先导通,但由于元器件存在差异,所以只会有1只三极管先导通。
左右来回循环的流水灯实验报告

青 岛 科 技 大 学微机原理与接口技术综合课程设计(报告)题 目 __________________________________指导教师__________________________ 学生姓名__________________________ 学生学号_________________________________________________________院(部)____________________________专业________________班______年 ___月 ___日直流电机控制综合实验 周艳平宋雪英 01 信息科学技术学院计算机科学与技术0961 2012 12 27摘要 (2)1、单片机概述 (2)2、仿真软件介绍 (2)3、需求分析 (3)一、课程设计目的 (3)二、课程设计要求 (4)三、实验内容 (4)1、设计任务与要求 (4)2、系统分析 (4)1).硬件电路设计(画出原理图、接线图) (5)2)软件框图 (7)3、用keil建项目流程 (8)4、程序清单 (9)4、系统调试 (11)四、设计总结(结论) (12)摘要近年来,随着电子技术和微型计算机的发展,单片机的档次不断提高,起应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到广泛的应用、成为现代电子系统中最重要的智能化的核心部件。
而AT89C51就是其中一种,它是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMO8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
本课程设计介绍一种LED小灯控制系统的设计方法,以单片机作为主控核心,与按键、排阻、电阻、电容等较少的辅助硬件电路相结合,利用软件实现对LED灯进行控制。
能够通过按键控制8个LED小灯从左到右依次点亮。
关键字:单片机、LED流水灯1、单片机概述单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
流水灯实验报告

方案二
将显示译码管的低位端A接高电平,74LS160的输出端QA悬空,QB、QC、QD分别接入B、C、D,利用74LS160自身的十进制计数,就可实现奇数序列。
图7奇数显示(1)
分析
第二种方案的显示时间是第一种方案的两倍,在进行自然数显示到奇数
列显示的时间周期就不相等了。所以选择方案一。
3.4
74hc139功能
2线—4线译码器,M74HC139/74HC139用于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由系统译码器所引起的有效系统延迟可以忽略不计。HC139含有两个单独的2线—4线译码器,当赋能输入端G为高电平时,按二进制控制输入码从4个输出端中译出一个低电平输出。在解调器应用中,低电平有效的赋能输入端用作数据线。
真值表
INPUTS输入
OUTPUTS输出
SELECTED OUTPUT选定的输出
ENABLE启用
SELECT选择
Y0
Y1
Y2
Y3
G
B
A
H
X
X
H
H
H
H
NONE
L
L
L
L
H
H
H
Y0
L
L
H
L
H
H
Y1
L
H
L
H
H
L
H
Y2
L
H
H
H
H
H
L
Y3
输入信号来自74hc390当QA,QB为“0”,“0”时,这时译码器的输出端就只有Y0为0,接一个反相器然后再接产生自然序列的计数器的清零端;这样就可以实现只有自然序列输出的功能,同理当QA,QB为“0”,“1”时,这是译码器的输出端就只有Y1为0,接一个反相器然后再接产生奇数序列的计数器的清零端,这样就可以实现只有奇数序列输出的功能;当QA,QB为“1”,“0”时,这是译码器的输出端就只有Y2为0,接一个反相器然后再接产生偶数序列的计数器的清零端,这样就可以实现只有偶数序列输出的功能。
课程设计方案彩灯循环控制器电路图实验报告

内蒙古农业大学课程设计课程名称电子技术综合设计与实训题目名称彩灯变换控制器设计学生学院机电工程学院专业班级电气工程及其自动化1班学号090511060学生姓名江谋伟指导教师曲辉2018年12月12日课程设计的内容设计任务及要求用一个LED数码管的每一段代表一组彩灯。
按数字循环显示3种序列:自然序列1,2,3,4,···奇数序列1,3,5,7偶数序列0,2,4,6,①具有显示,清零功能。
②数码管现实快慢连续调节<即计数时钟方波频率可调,0.5~2HZ)摘要这次的课程设计主要是用计数器来实现的,这个彩灯循环控制电路的实质就是要产生一系列有规律的数列,然后通过一个八段数码管显示出来。
这里使用的主要就是计数器,计数器在时序电路中应用的很广泛,它不仅可以用于对脉冲进行计数,还可用于定时,产生节拍脉冲以及其他时序信号。
运用计数器的不同的功能和不同的接发就可以实现不同的序列输出了。
而这次的内容还包括分电路图的整合,使这个彩灯循环显示器能够按照要求那个依次输出自然序列,奇数序列,偶数序列。
最后还有一个部分就是用7447译码器把74160输出的信号用数码管显示出来。
一前言让人眼花撩乱的广告彩灯随处可见,他将城市的夜晚装扮的美丽迷人,商家已无法离开广告彩灯这一非常有效的宣传武器。
利用价格低廉的普通集成芯片可实现很多种广告彩灯控制。
例如用单片机,8086,8088等高级芯片,实现彩灯的循环点亮等,本设计利用常用的555定时器及74ls系列器件设计8路彩灯电路。
二原理框图三芯片功能介绍1)555定时器 555定时器是8引脚集成器件,其工作原理为:输出电压只有两种状态:高电平低电平.在555定制器的复位端R 端为低电平的条件下,无论阈值输入端TH和触发输入端TB>Tc 取何值,输出端OUT输出低电平,且放电端口D与地接通。
当复位端R为高电平时,如果阈值电压TH>2Vcc/3,且触发电压TR>Vcc/3,输出端OUT输出低电平,且放电端口D与地接通;如果阈值嗲电压TH<Vcc/3,且触发电压TR>Vcc/3,输出端OUT和放电端D保持原状态不变:只要触发电压TR<Vcc/3时,输出端OUT输出高电平,且放电端口D与地段开。
VHDL_fpga_数电实验_彩灯_LED_实验报告

彩灯VHDL设计在日常生活中,为了增加聚会或是过节氛围,经常要使用到彩灯循环点亮。
单一的循环可能无法起到理想的效果,通过不同花样的变换则能够很好的完成任务。
多路彩灯循环控制可以有多种实现方法,例如利用单片机可以实现,利用数字电路时序逻辑也可以实现。
我们这里利用VHDL语言实现对多路彩灯的控制。
彩灯的一种点亮方式经过足够长的延时后,转变为了其他的点亮方式。
这就需要一个CLK信号完成,CLK信号可以由晶体振荡器或者是振荡电路产生。
至于各种不同花样彩灯的变换,我们可以通过增加输入信号Sel来控制。
Sel为两位二进制数,分别为00,01,10,11,四种状态对应四种花样。
同时系统还需一个复位信号实现对电路的清零控制。
输出八位彩灯,我们这里用LED发光二极管代替。
当电路输出为“1”时,LED点亮。
当电路输出为“0”时,LED熄灭。
利用VHDL语言实现该功能程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_ARITH.ALL;USE IEEE.std_logic_UNSIGNED.ALL;ENTITY cd ISport( clk,clk_use:in std_logic;rst:in std_logic;light:out std_logic_vector(7 downto 0));END cd;ARCHITECTURE control OF cd IStype states is (s0,s1,s2,s3,s4,s5);signal state:states;SIGNAL clk1ms:std_logic:='0';SIGNAL cnt1:std_logic_vector(3 downto 0):="0000";SIGNAL cnt2:std_logic_vector(3 downto 0):="0000";SIGNAL cnt3:std_logic_vector(2 downto 0):="000";SIGNAL cnt4:std_logic_vector(2 downto 0):="000";SIGNAL cnt5:std_logic_vector(3 downto 0):="0000";SIGNAL cnt6:std_logic_vector(3 downto 0):="0000";BEGINPROCESS(clk1ms)BEGINif clk1ms'event and clk1ms='1' thenif state=s0 then --第一种彩灯花样的程序if (cnt1="1111") thencnt1<="0000";else cnt1<= cnt1+1;end if;case cnt1 iswhen "0000"=>light<="10000000";when "0001"=>light<="10100000";when "0010"=>light<="10101000"; when "0011"=>light<="10101010"; when "0100"=>light<="11101010"; when "0101"=>light<="11111010"; when "0110"=>light<="11111110"; when "0111"=>light<="11111111"; when "1000"=>light<="11111110"; when "1001"=>light<="11111010"; when "1010"=>light<="11101010"; when "1011"=>light<="10101010"; when "1100"=>light<="10101000"; when "1101"=>light<="10100000"; when "1110"=>light<="10000000"; when others=>light<="00000000";end case;elsif state=s1 then -- 第二种彩灯花样的程序if cnt2="1111" thenCnt2<="0000";else cnt2<= cnt2+1;end if;case cnt2 iswhen "0000"=>light<="11111111"; when "0001"=>light<="01111111"; when "0010"=>light<="00111111"; when "0011"=>light<="00011111"; when "0100"=>light<="00001111"; when "0101"=>light<="00000111"; when "0110"=>light<="00000011"; when "0111"=>light<="00000001"; when "1000"=>light<="00000011"; when "1001"=>light<="00000111"; when "1010"=>light<="00001111"; when "1011"=>light<="00011111"; when "1100"=>light<="00111111"; when "1101"=>light<="01111111"; when "1110"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s2 then -- 第三种彩灯花样的程序if cnt3="100" thenCnt3<="000";else cnt3<= cnt3+1;end if;case cnt3 iswhen "000"=>light<="10000001"; when "001"=>light<="11000011"; when "010"=>light<="11100111"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s3 then -- 第四种彩灯花样的程序if cnt4="100" thencnt4<="000";else cnt4<= cnt4+1;end if;case cnt4 iswhen "000"=>light<="00011000"; when "001"=>light<="00111100"; when "010"=>light<="01111110"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s4 then --第五种彩灯花样的程序if cnt5="1111" thenCnt5<="0000";else cnt5<=cnt5+1;end if;case cnt5 iswhen "0000"=>light<="11000000"; when "0001"=>light<="01100000"; when "0010"=>light<="00110000"; when "0011"=>light<="00011000"; when "0100"=>light<="00001100"; when "0101"=>light<="00000110"; when "0110"=>light<="00000011"; when "0111"=>light<="00000110"; when "1000"=>light<="00001100"; when "1001"=>light<="00011000"; when "1010"=>light<="00110000"; when "1011"=>light<="01100000"; when "1100"=>light<="11000000"; when others=>light<="00000000";end case;elsif state=s5 then -- 第六种彩灯花样的程序if cnt6="1111" thenCnt6<="0000";else cnt6<=cnt6+1;end if;case cnt6 iswhen "0000"=>light<="00000011"; when "0001"=>light<="00000110"; when "0010"=>light<="00001100"; when "0011"=>light<="00011000"; when "0100"=>light<="00110000"; when "0101"=>light<="01100000"; when "0110"=>light<="11000000"; when "0111"=>light<="01100000"; when "1000"=>light<="00110000"; when "1001"=>light<="00011000"; when "1010"=>light<="00001100"; when "1011"=>light<="00000110"; when "1100"=>light<="00000011"; when others=>light<="00000000";end case;end if;end if;END PROCESS P1;P2:PROCESS(clk) --分频进程variable cnt:integer range 0 to 10; BEGINIF(RST='0')thencnt:=0;ELSIF(clk'EVENT AND clk='1')thenif cnt<9 thencnt:=cnt+1;clk1ms<='0';elsecnt:=0;clk1ms<='1';end if;end if;end PROCESS P2;process(rst)--循环beginif (rst='1') thenstate<=s0;elseif(clk_use'event and clk_use='1') thencase state iswhen s0 =>state<=s1;when s1=>state<=s2;when s2=>state<=s3;when s3 =>state<=s4;when s4=>state<=s5;when s5=>state<=s1;end case;end if;end if;end process;end control;本控制电路采用VHDL语言设计。
实验报告循环彩灯控制器

湖南科技大学信息与电气工程学院《VHDL语言》课程设计报告题目: VHDL语言课程设计专业:班级:姓名:学号:课程设计任务书一、课程设计的目的:1,通过本次课程设计,熟练掌握MAX-PLUS2的应用,操作,并对VHDL语言的编程做一实践检验,编出程序,并进行仿真,并根据所得仿真图形分析和推断并改进所涉及的程序,让程序在现实生活中得以更贴近的应用。
2,本次操作的命题一是:循环彩灯控制器,本设计的要求是:设计一个循环彩灯控制器,该控制器控制红,绿,黄三个发光管循环点亮。
要求红发光管亮3秒,绿发光管亮2秒,黄发光管亮1秒。
3,本次操作的命题二是:数字显示的秒表,本设计的要求是:设计一块用数码管显示的秒表,能够准确的计时并显示。
最大计时为59秒,最小精确到0.1秒。
二、设计方案的论证:命题一循环彩灯控制器的方案一:在本题中要求控制器可以控制红,绿,黄三个发光管循环点亮,并且要求发光的时间不一样,这样,本质设计思想是循环累加,即时钟信号高电平开始,m值开始累加,CASE m ISWHEN "001"=>dout<="100";WHEN "010"=>dout<="100";WHEN "011"=>dout<="100";WHEN "100"=>dout<="010";WHEN "101"=>dout<="010";WHEN "110"=>dout<="001";WHEN OTHERS=>dout<="111";END CASE;前三个值都将赋值给dout1,也就是红灯发光的三秒,然后两个赋值给绿灯,最后一秒赋值给黄灯。
循环彩灯实验报告

循环彩灯实验报告循环彩灯实验报告引言:灯光在我们生活中扮演着重要的角色,无论是室内照明还是舞台表演,灯光的运用都能够给人们带来不同的感受和体验。
在这个实验中,我们将探索循环彩灯的原理和制作方法,以及其在不同场景中的应用。
一、实验目的本实验的目的是通过制作循环彩灯来理解电路的原理,并了解灯光的运作机制。
同时,通过实践操作,培养我们的动手能力和创造力。
二、实验材料1. 彩灯:红、绿、蓝三种颜色的LED灯各3个2. 电阻:100欧姆、220欧姆、330欧姆各1个3. 电容:100μF、220μF、330μF各1个4. 电池:9V电池1个5. 面包板:1块6. 连接线:若干根三、实验步骤1. 将面包板连接到电池的正负极上,确保电路能够正常通电。
2. 将三种颜色的LED灯分别插入面包板上的不同位置,注意连接的极性。
3. 在每个LED灯的正极和负极之间分别插入不同电阻和电容,形成不同的电路。
4. 打开电池,观察LED灯的亮灭情况和颜色变化。
四、实验结果与分析通过实验观察,我们可以发现以下现象:1. 当电路中只有一个LED灯时,灯光亮起来,并且颜色与LED本身的颜色一致。
2. 当电路中加入电阻时,LED灯的亮度会有所变化,电阻越大,亮度越低。
3. 当电路中加入电容时,LED灯的亮度会有所变化,电容越大,亮度越高。
这些现象的发生可以通过以下原理解释:1. LED灯是一种半导体材料,当通过正向电流时,电子和空穴在半导体材料内复合,释放出能量,从而发出光线。
2. 电阻的加入会影响电流的流动,使得通过LED灯的电流减小,从而导致亮度的下降。
3. 电容的加入会使得电路中的电荷储存和释放更加平滑,从而使得LED灯的亮度更加稳定。
五、实验应用循环彩灯的制作不仅仅是为了理解电路的原理,还可以应用于各种场景中,例如:1. 舞台表演:通过控制循环彩灯的亮灭和颜色变化,可以创造出各种炫目的灯光效果,增加表演的视觉冲击力。
2. 节日庆典:在节日庆典活动中,循环彩灯可以装饰场地,营造出欢乐喜庆的氛围。
流水灯实验报告

单片机流水灯试验一、实验目得:1、进一步熟悉KeilC51集成开发环境调试功能得使用2、学会自己编写程序,进行编译、仿真调试3、学会使用单片机得P0口作为I/O口去控制外围电路,实现LED灯以固定得频率进行闪烁、二、实验设备:1、PC机2、SW-51PROC单片机综合实验平台三、实验内容:1、编写一段程序,用单片机P0口得8个输出去控制8个LED灯,实现如下功能:先使8个LED灯轮流点亮,从左向右移动,时间间隔0、5s。
以上过程循环实现、四、实验步骤:1、实验原理:单片机流水得实质就是单片机各引脚在规定得时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电得时间后便灭灯得过程,实验中使用了单片机得P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2得各端口逐一置零,中间使用时间间隔隔开各灯得亮灭。
使用rl或rr a实现位得转换。
A寄存器得位经过rr a之后转换如下所示:然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后得数送到了P2口,不断循环下去,便实现了逐位置一操作、2、实验电路图a1 1a223a34a4b1b2b3b45678GNDa11a223a34a4P2.4P2.5P2.6P2.75678a11a223a34a4P2.0P2.1P2.2P2.35678Vcc1+5v80C513通过仿真实验正确性代码如下:ORG 0MOV A,#00000001BLOOP:MOVP2,ARL AACALL DELAYSJMP LOOPDELAY:MOVR1,#255DEL2:MOVR2,#250DEL1:DJNZ R2,DEL1DJNZ R1,DEL2RETEndORG 0000HLJMP MAIN4、实验程序:ORG 0050HMAIN:MOV R0,#14MOV DPTR,#TABLEL0: MOV A,#0L1: MOVC A,DPTR+AMOVP0,AACALL DELAY1INC A41DJNZ R0,L1SJMP L0DELAY1:MOV R1,#250LOOP1:MOVR2,#250LOOP2:NOPNOPNOPNOPNOPDJNZﻩR0,LOOP2DJNZ R1,LOOP1RETTABLE:DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDHEND5、实验结果:五、实验总结这次试验我通过Proteus仿真实现对流水灯功能得实现。
单片机实验报告2

《单片机应用系统设计》实验报告院系:仪器科学与工程学院专业:测控技术与仪器实验室:机械楼5楼同组人员:评定成绩:审阅教师:硬件实验一I/O口输入/输出及控制实验Ⅰ、I/O口输入/输出实验一、实验目的1、学习单片机I/O口的使用方法2、学习延时子程序的编写和使用二、实验内容1、I/O口输出:P1口做输出口,接八只发光二极管,编写程序让发光二极管循环点亮。
2、I/O口输入/输出:P1.0、P1.1做输入口接两个拨动开关;P1.2、P1.3做输出口,接两个发光二极管。
编写程序读取开关状态,将此状态在发光二极管上显示出来。
编程时应注意P1.0、P1.1作为输入口时应先置1,才能正确读入值。
三、实验步骤1、I/O口输出硬件连接连线连接孔1 连接孔21 P1.0 L02 P1.1 L13 P1.2 L24 P1.3 L35 P1.4 L46 P1.5 L57 P1.6 L68 P1.7 L7MCS51的P1口循环点灯2、I/O口输入/输出硬件连接连线连接孔1 连接孔21 K4 P1.02 K5 P1.13 P1.2 L44 P1.3 L5MCS51的P1口输入/输出3、实验说明(1)对于MCS51,P1口是准双向口。
它作为输出口时与一般的双向口使用方法想同;但准双向口用作输入口时,因其结构特点必须对它置“1”,否则读入的数据容易产生错误。
(2)8051延时子程序的延时计算问题,对于程序DELAY:MOV R6, #0HMOV R7, #0HDELAYLOOP:DJNZ R6, DELAYLOOPDJNZ R7, DELAYLOOPRET查指令表可知MOV和DJNZ指令均需两个指令周期,在12MHz晶振时,一个机器周期时间为:12/12MHZ=1ms,该延时子程序延时:(256X255+2)X2X1us=130ms。
4、分别连接硬件并执行相关程序,记录结果。
四、提高要求修改I/O口输出程序,先1、3、5、7灯亮,延时后2、4、6、8灯亮,交替点亮。
(1)LED 灯控制实验

实验报告11.实验名称:LED 灯控制实验2.实验原理:程序通过配置CC2530 IO 寄存器的高低电平来控制LED 灯的状态,用循环语句来实现程序的不间断运行。
ZigBee(CC2530)模块硬件上设计有2 个LED 灯,用来编程调试使用。
分别连接CC2530 的P1_0、P1_1两个IO 引脚。
从原理图上可以看出,2 个LED 灯共阳极,当P1_0、P1_1 引脚为低电平时候,LED灯点亮。
3.实验原理图:4.实验结果:一个LED灯亮,一个LED灯闪。
5.实验改进需求:两个LED等交替闪烁6.代码:原始代码:#include<ioCC2530.h>#define uint unsigned int#define uchar unsigned char//定义控制LED灯端口#define LED1 P1_0#define LED2 P1_1void Delay(uint n);void Initial(void);//延时void Delay(uint n){uint i,t;for(i=0;i<5;i++)for(t=0;t<n;t++);}//初始化void Initial(void){P1DIR |= 0x03; //P1_0、P1_1定义为输出LED1=1; //灯熄灭LED2=1; //灯熄灭}//主函数void main(void){Initial();LED1 = 0;//灯变亮LED2 = 0;//灯变亮while(1){LED2=!LED2;Delay(50000);}}改进后代码:#include<ioCC2530.h>#define uint unsigned int //定义uint为无符号整型#define uchar unsigned char//定义控制LED灯端口#define LED1 P1_0#define LED2 P1_1void Delay(uint n);void Initial(void);//延时void Delay(uint n){uint i,t;for(i=0;i<5;i++)for(t=0;t<n;t++);}//初始化void Initial(void){P1DIR |= 0x03; //P1_0、P1_1定义为输出LED1=1; //灯熄灭LED2=1; //灯熄灭}//主函数void main(void){Initial(); //调用初始化函数LED1 = 0; //灯点亮LED2 = 0; //灯点亮while(1){LED2=!LED2; //灯熄灭if(LED2==0){LED1=1; //}else{LED1=0;}Delay(50000);}}7.更改代码之后的结果:红灯和蓝灯交替闪烁。
循环彩灯实验报告

实验报告数字显示电路实验将基本门实验,编码器、显示译码器、7段显示器实验,加法器实验和比较器实验综合为一个完整的设计型的综合实验。
通过本实验,要求熟悉各种常用MSI组合逻辑电路的功能和使用方法,学会组装和调试各种组合逻辑电路,掌握多片MSI、SSI组合逻辑电路的级联、功能扩展及综合技术,使学生具有数字系统外围电路、接口电路方面的综合设计能力。
实验目的1、掌握基本门电路的应用,了解用简单门电路实现控制逻辑。
2、掌握编码,译码和显示电路的设计方法。
3、掌握用全加器,比较器设计电路的方法。
实验内容:实现2-8灯右移循环。
拓展内容:2-8灯左移循环,奇偶灯闪烁,8灯往复循环。
元件清单:74ls194、74ls195各两片,555定时器一片,4060十四位加法器一片,开关若干,47nf、10uf电容各一只,1k电阻两个,300 双刀双掷开关两个。
实验原理:#循环功能主要由移位寄存器74ls194实现,拿右移举例,实验原理图如下:两个74ls194串联,组成八位的移位寄存器,第二片的Q4端加非门连到S0,当Q4端为低电平时,通过拨码开关向Q1-Q8置位,Q1-Q8为01111111,第一灯亮;这时S0=1,S1=0,右移,因为第一片sr端接高,Q1=1,故Q1-Q8为,第二灯亮……当循环到达时,第八灯亮,实现一次循环,此时S0=1,S1=1,重新置数为01111111,新的循环开始。
改变开关,可实现2-8灯亮。
左移循环原理:与右移循环类似,只是要将Q1加非门连到S1端,通过拨码开关向Q1-Q8置位,Q1-Q8为,第八灯亮;这时S0=0,S1=1,右移,因为第二片sl端接高,Q1=1,故Q1-Q8为,第七灯亮……当循环到达01111111时,第一灯亮,实现一次循环,此时S0=1,S1=1,重新置数为,新的循环开始。
、改变开关,可实现2-8灯亮。
奇偶灯闪烁:将拨码开关置为01010101,模式设为右移,下一时刻Q1-Q8为,重新置位01010101,这样就实现了闪烁功能。
微机原理与应用-实验报告

《微机原理与应用》实验报告姓名:***学号:**********年级:2014专业:电子2016年春季学期实验一.熟悉单片机开发环境1.功能要求在 P1 端口接8 个LED,并编程依次循环点亮。
要求用软件延时程序控制LED 的亮灭时间,并能精确地计算和用软件测量延时时间。
2.硬件原理3.程序清单ORG 0000HLJMP STARTORG 0030HSTART: MOV R2,#8MOV A,#01H LOOP1: MOV P1,ALCALL DELAY RL ADJNZ R2,LOOP1 MOV R2,#8RR ALOOP2: MOV P1,ALCALL DELAY RR ADJNZ R2,LOOP2 LJMP STARTDELAY: MOV R5,#20 D1: MOV R6,#80 D2: MOV R7,#248 DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND4.实验心得首次接触开发板,通过实验1加强了对单片机的了解,学会使用仿真软件,学会搭线的各种技巧,并且掌握了LED亮灭的原理。
实验二.并行口输入输出实验——循环彩灯控制1.功能要求P1 口接8 个开关,P0 口接8 个灯,每个开关对应一个灯,实时读取开关状态,开关闭合时,灯亮。
开关断开时,灯灭。
用5 个开关K0~K4,控制P0 口所接8 个灯的循环,各开关的功能要求如下:(1)K1~K2 分别选择灯的四种闪动方式;(2)K3 用于控制灯的循环方向(顺时针或逆时针);(3)K4 用于选择灯的两种循环速度;(4)K0 用于引发外部中断,在外部中断子程序中,读取通过K1-K4 所设定 的循环彩灯的工作方式,并按所设定的工作方式控制彩灯运行。
当K0 没有引发 中断时,保持上一次的循环方式。
2.硬件原理3.程序清单ORG 0000HLJMP MAINDELAY2: MOV R0,#200 D4: MOV R1,#200ORG 0003HLJMP INTERRUPTORG 0030HMAIN: SETB EX0SETB IT0SETB EAMOV A,#01HA1: MOV P0,AJB 20H.2,B1JNB 20H.2,B2A2: JB 20H.3,LOOP11 JNB 20H.3,LOOP22 B1: LCALL DELAY1LJMP A2B2: LCALL DELAY2LJMP A2LOOP11: RL ALJMP A1LOOP22: RR ALJMP A1ORG 0600HDELAY1: MOV R0,#100D1: MOV R1,#100D2: MOV R2,#10D3: DJNZ R2,D3DJNZ R1,D2DJNZ R0 ,D1RET4.实验心得开始熟悉开发板,通过实验2加强了对单片机的了解,学会中断程序的书写方法,学会搭线的各种技巧,并且掌握了跑马灯工作的原理。
实验报告:红绿黄三色12LED循环灯

重庆三峡学院实验报告课程名称电子实习实验名称红绿黄三色12LED循环灯年级班级学生姓名学号指导教师邱刚2012年12月14日一、实验目的1. 学会识别各种元器件。
2. 学习并掌握焊接技术以及简单元器件装配。
3. 学习印刷电路板。
4. 掌握3色12 LED循环灯的工作原理。
5. 了解安全用电常识。
二、实验任务分析1.实验器材印刷电路板、电阻、三极管、发光二极管、电烙铁、松香、锡线 2.电子器件的识别1)电阻分类:a.普通电阻表示方法:直标法、文字符号法、色标法直标法:用阿拉伯数字和单位符号在电阻器表面直接标出标称阻值,容许误差直接用百分数表示文字符号法:用阿拉伯数字和文字符号两者有规律的组合来表示标称色标法:用不同颜色的环或点在电阻器表面上标出标称阻值和允许误差有四环表示法(允许误差≥5%)、五环表示法(允许误差≤2%)色标法的颜色意义:b.可变电阻所标注大小一般为最大阻值c.热敏电阻阻值随温度升高而变大d.光敏电阻光线越暗,电阻越大2)电容瓷片电容无正负极电容值大小表在电容上表示方法:用1~3位数字表示,容量单位为pF,如103=10×103 PF电解电容有极性长引脚为正短引脚为负电容值标在圆环上3) 三极管以面对矩形面为参考面由左至右依次为射极、基极、集电极4) LED发光二极管长脚为正短脚为负3.焊接技术及元器件安装:焊接:焊接步骤:1)去氧化膜2)引脚吃锡(薄厚均匀且有一定厚度)3)焊接(保证插入元器件的正负极正确,注意焊接时松香适量)焊接技术:1)焊点良好,牢固可靠,整洁可观,无毛刺2)锡量适中,焊接实践不宜太长,2-3s为宜注意事项:1)尽量不出现虚、漏、假焊2)剪引脚时不能破坏焊点3)焊接完成后,经仔细检查无虚、漏、假焊,并确保无短路状态后,通电调试4)三极管的引脚要插入正确5)安全用电6)操作过程中不能带电操作元器件安装及要求:在确保识别正负极正确的情况下,将元器件插入电路板中,先安装低矮和耐热的元件(如电阻),然后安装大一点的元件(如中周、变压器),最后安装怕热的元件(如三极管等)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术12-1班学号:2012211599姓名:柏恩慈一、设计题目及要求:题目:利用8255A和8253使发光二极管按一定规律轮流点亮要求:发光二极管的点亮方式:将发光二极管分为n组,每组12/n个灯管,每组灯管发光时间没t。
设有8种组合:(1)n=12,t=1s: 每个灯管单独一组,间隔1秒循环点亮。
(2)n=12,t=2s: 每个灯管单独一组,间隔2秒循环点亮。
(3)n=6,t=1s: 每两个灯管一组,间隔1秒循环点亮。
(4)n=6,t=2s: 每两个灯管一组,间隔2秒循环点亮。
(5)n=4,t=1s: 每三个灯管一组,间隔1秒循环点亮。
(6)n=4,t=2s: 每三个灯管一组,间隔2秒循环点亮。
(7)n=3,t=1s: 每四个灯管一组,间隔1秒循环点亮。
(8)n=3,t=2s: 每四个灯管一组,间隔2秒循环点亮。
要求:按键盘的“A”, “B”, “C”, “D”分别表示选择的灯管数目(一个一组,两个一组,三个一组,四个一组),按键盘的“E”, “F”,表示选择时间(一秒两秒)。
程序启动时默认按第一种方式进行循环,当按动“A~F”时,根据设定情况随时改变循环方式,当按“0”键退出程序,所有灯管熄灭。
提示:1:主程序为键盘输入按’A’~’D’命令分支到各点亮功能程序段,按’0’退出。
2:定时时间1秒2秒可由8253产生定时中断,通过IPQ2引起中断请求。
8253的定时器工作可参考“定时/计数器:8253方波”。
3:在中断服务程序中,通过8255A的端口B的PB4-PB7,端口C的PC0—PC7来设置发光二极管下一组灯点亮,其他灯都暗。
次序可从左到右,也可以从右到左。
4: 8255A输出点亮发光二极管可参考“8255A”并行口实验(三)。
二、设计思想:使用8259中断服务子程序,来去执行中断,用8253方波计时器来去产生1秒和两秒的时间间隔。
把8253和8259结合正好可以把间隔一秒和两秒的计时器导入程序之中。
利用5255A交通灯的特性,把交通灯按要求轮流点亮。
(一)可编程并行接口芯片8255系统中的8255线路8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出供825实验使用。
可编程并行接口Intel8255A,其内部结构如图所示,由以下4个部分组成:①数据总线缓冲器。
这是一个三态双向8位缓冲器,它是8255A与CPU系统数据总线的接口。
所有数据的发送与接收,以及CPU发出的命令字和从8255A来的状态信息都是通过该缓冲器传送的。
②读/写控制逻辑。
读/写控制逻辑由读信号RD,写信号WR,选片信号CS以及端口选择信号A0、A1等组成。
读/写控制逻辑控制了总线的开放、关闭和信息传送的方向,以便把CPU的控制命令或输出数据送到相应的端口;或把外设的信息或输入数据从相应的端口送到CPU。
8255A的基本操作及在TP86A、PC/TX和扩展板上的端口地址如下表所示。
③输入/输出端口A、B、C。
8255A包括3个8位输入输出端口(port)。
每个端口都有一个数据输入寄存器和一个数据输出寄存器,输入时端口有三态缓冲器的功能,输出时端口有数据锁存器功能。
在实际应用中,PC口的8位可分为两个4位端口(0方式下),也可以分成一个5位端口和一个3位端口(2方式下)来使用。
④A组和B组控制电路。
控制A,B,C三个端口的工作方式,A组控制A口和C-4-口的上半部(PC4-PC7),B组控制B口和C口的下半部(PC0-PC3)的工作方式和输入输出。
A组和B组的命令寄存器还接收按位控制命令,以实现对PC口的按位置位/复位操作。
(二)Intel8253可编程定时/计数器1片8253内部有3个计数器,分别称为计数器0、1、2,其结构完全,互相之间工作完全独立。
每个计数器有三个引脚和外部联系CLK:计数脉冲输入,计数器对该引脚出现的信号进行计数,最高计数速率为2.6MHZ。
Gate:门控输入,用于控制计数器是否对CLK计数。
OUT:输出信号端。
每个计数器内部都有1个8位的控制寄存器,三个控制寄存器使用同一端口地址,在编程结构图中,画为1个控制寄存器。
每个计数器内部还有1个计数初值寄存器(CR)、1个计数执行部件(CE)和1个输出锁存器(OL),它们都是16位的。
执行部件(CE)是1个16位减法计数器,其起始值等于初值寄存器(CR)的值。
CR的值通过程序设置。
输出寄存器(OL)用来锁存执行部件(CE)的值,以便CPU读出。
原理:通过Intel8253可编程定时/计数器方式3方波发生器与方式0计数结时产生中断风别产生的方波和中断来计数,配合可编程并行接口芯片8255来控制流水灯的循环点亮,通过键盘扫描来接受外部控制.并通过八段数码管将A,B,C,D显示,并且转入相应的模式执行。
实验连线:8255A:PA0-L15 PA1-L14 PA2-L13 PA3-L11PA4-L10 PA5-L9 PA6-L7 PA7-L6PB0-L5 PB1-L3 PB2-L2 PB3-L18259:连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与总线单元上方的GS相连。
将8259CS插孔与译码单元的Y0相连,中断源IR7与单脉冲单元的SP插孔相连。
用8芯扁平电缆将8259中断控制单元的数据总线插座与数据总线单元任一插座相连。
8253:将8253CS与译码单元的Y1相连,中断源IR0与8253的OUT0口相连。
用8芯扁平电缆将8251串行通信单元的数据总线插座与数据总线单元任一插座相连。
GATE0与+5V相连,CLK0与频单元T7相连三、 功能流程图:按键A B C D按键 按键 按键 按键E F E F E F E F按键 0四、结果讨论:刚开始使用循环计时来实现倒计时,计时会有误差,改为8253计时器之后,及时秒数比较准确。
因为要求可以随时切换状态,所以将检测有无按键以及按键之后的切换写成一个子程序,在需要切换的地方进行调用。
所有的模块都写成子程序,这样在调用的时候比较方便。
使用8259中断时,要注意关中断和开中断的位置,否则会造成中断脉冲按键不灵。
程序的关键是每个状态的相互切换。
附录:实验代码:(完整的源程序)CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 2000H执行代码 初始化 第一种情况1 87 6 5 4 3 2 退出程序JMP APA EQU 0FFD8HPB EQU 0FFD9HPC EQU 0FFDAHPCTL EQU 0FFDBHOUTSEG EQU 0FFDCH ;段控制口OUTBIT EQU 0FFDDH ;位控制口/键扫口IN_KEY EQU 0FFDEH ;键盘读入口ZXK EQU 0FFDCH ;字型口ZWK EQU 0FFDDH ;字位口Port0 EQU 0FFE4HPort1 EQU 0FFE5HSHOW1 DB 02HFLAG DB ?PCC1 DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,0FFH,0FFH,0FFH,0FFH PBC1 DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,07FH,0BFH,0DFH,0EFHPCC2 DB 03FH,0CFH,0F3H,0FCH,0FFH,0FFHPBC2 DB 0FFH,0FFH,0FFH,0FFH,03FH,0CFHPCC3 DB 01FH,0E3H,0FCH,0FFHPBC3 DB 0FFH,0FFH,07FH,08FHPCC4 DB 0FH, 0F0H,0FFHPBC4 DB 0FFH,0FFH,0FH;---------------------8253芯片初始化---------------------------A: MOV DX,0FFE3H ;控制口MOV AL,36H ;计数器0,方式3,二进制计数OUT DX,ALMOV DX,0FFE0HMOV AL,00OUT DX,ALMOV AL,4bHOUT DX,AL;---------------------------------------------------------------;---------------------8255芯片初始化--------------------------- MOV DX,PCTLMOV AL,80H ;1000 0000bOUT DX,ALMOV DX,PA ;PA置0MOV AL,0OUT DX,ALMOV DX,PBMOV AL,0FFHOUT DX,ALMOV DX,PCMOV AL,0FFHOUT DX,AL;---------------------------------------------------------------;----------------------中断向量地址------------------------------ CLIMOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259STI;----------------------------------------------------------------- JMP _AESTART: CALL GetKeyCMP AL,0AHJZ NEXTACMP AL,0BHJZ NEXTBCMP AL,0CHJZ NEXTCCMP AL,0DHJNZ _DJMP NEXTD_D: CMP AL,00HJNZ STARTJMP EXIT NEXTA: MOV FLAG,0CALL GetKeyCMP AL,0EHJZ _AECMP AL,0FHJZ _AFJMP NEXTA _AE: MOV SI,0MOV DI,0CALL EJMP LAST_AF: MOV SI,0MOV DI,0CALL FJMP LAST NEXTB: MOV FLAG,1CALL GetKeyCMP AL,0EHJZ _BECMP AL,0FHJZ _BFJMP NEXTB _BE: MOV SI,0MOV DI,0CALL EJMP LAST_BF: MOV SI,0MOV DI,0CALL FJMP LAST NEXTC:MOV FLAG,2CALL GetKeyCMP AL,0EHJZ _CECMP AL,0FHJZ _CFJMP NEXTC _CE: MOV SI,0MOV DI,0CALL EJMP LAST_CF: MOV SI,0MOV DI,0CALL FJMP LASTNEXTD:MOV FLAG,3CALL GetKeyCMP AL,0EHJZ _DWECMP AL,0FHJZ _DWFJMP NEXTD_DWE: MOV SI,0MOV DI,0CALL EJMP LAST_DWF: MOV SI,0MOV DI,0CALL FJMP LASTEXIT: CALL FINISHJMP FINLAST: JMP STARTFIN: HLT;------------------------------中断服务子程序----------------------------- INT8259: CLICMP FLAG,0JZ LACMP FLAG,1JZ LBCMP FLAG,2JZ LCJMP LDLA: MOV AL,PCC1[SI]MOV DX,PCOUT DX,ALMOV AL,PBC1[DI]MOV DX,PBCMP SI,0BHJZ CONAINC SIINC DIJMP FINI CONA: MOV SI,00HMOV DI,00HJMP FINILB: MOV AL,PCC2[SI]MOV DX,PCOUT DX,ALMOV AL,PBC2[DI]MOV DX,PBOUT DX,ALCMP SI,05HJZ CONBINC SIINC DIJMP FINI CONB: MOV SI,00HMOV DI,00HJMP FINILC: MOV AL,PCC3[SI]MOV DX,PCOUT DX,ALMOV AL,PBC3[DI]MOV DX,PBOUT DX,ALCMP SI,03HJZ CONCINC SIINC DIJMP FINI CONC: MOV SI,00HJMP FINILD: MOV AL,PCC4[SI]MOV DX,PCOUT DX,ALMOV AL,PBC4[DI]MOV DX,PBOUT DX,ALCMP SI,02HJZ CONDINC SIINC DIJMP FINICOND: MOV SI,00HMOV DI,00HJMP FINIFINI: MOV DX,PORT0MOV AL,20HOUT DX,ALSTIIRET;------------------------------中断服务子程序-----------------------------;---------------------8259芯片初始化------------------------------ FOR8259: MOV AL,13HMOV DX,Port0OUT DX,ALMOV AL,08HMOV DX,Port1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;-----------------------------------------------------------------;------------------------------按键E----------------------------- E:MOV DX,PAMOV AL,01HOUT DX,ALMOV DX,0FFE0HMOV AL,00OUT DX,ALMOV AL,4BHOUT DX,ALRET;-----------------------------------------------------------------;------------------------------按键F----------------------------- F:MOV DX,PAMOV AL,01HOUT DX,ALMOV DX,0FFE0HMOV AL,00OUT DX,ALMOV AL,96HOUT DX,ALRET;----------------------------------------------------------------- ;------------------------------按键0----------------------------- FINISH: MOV DX,PCTLMOV AL,80HOUT DX,ALMOV DX,PBMOV AL,0FFHOUT DX,ALMOV DX,PCMOV AL,0FFHOUT DX,ALRET;-----------------------------------------------------------------;-----------------------键扫子程序------------------------------ GetKey: ;mov al,0ffh ;关显示口mov dx,OUTSEGout dx,almov bl,0mov ah,0fehmov cx,8key1: mov al,ahmov dx,OUTBITout dx,alshl al,1mov ah,alnopnopnopnopnopnopmov dx,IN_KEYin al,dxnot alnopnopand al,0fhjnz key2inc blloop key1nkey: mov al,20hretkey2: test al,1je key3mov al,0jmp key6key3: test al,2je key4mov al,8jmp key6key4: test al,4je key5mov al,10hjmp key6key5: test al,8je nkeymov al,18hkey6: add al,blcmp al,10hjnc fkeymov bx,offset KeyTablexlatfkey: retKeyTable: ;键码定义db 07h,04h,08h,05h,09h,06h,0ah,0bhdb 01h,00h,02h,0fh,03h,0eh,0ch,0dh;----------------------------------------------------------------CODE ENDSEND。