发光二极管流水灯实验
流水灯实验报告总结
流水灯实验报告总结一、实验目的本次流水灯实验的主要目的是通过实际操作,深入理解数字电路中时序逻辑电路的工作原理,掌握基本的硬件电路设计和编程方法,提高我们对电子电路的实践操作能力和问题解决能力。
二、实验原理流水灯是通过控制一系列发光二极管(LED)依次点亮和熄灭,从而产生一种流动的视觉效果。
其实现的核心原理是利用计数器和译码器来控制 LED 的亮灭状态。
在数字电路中,计数器可以对输入的时钟脉冲进行计数,从而产生不同的计数值。
译码器则将计数器输出的计数值转换为对应的控制信号,使得相应的 LED 点亮或熄灭。
例如,使用常见的 74LS161 四位二进制同步计数器和 74LS138 三线八线译码器,可以构建一个简单的八路流水灯电路。
计数器在时钟脉冲的驱动下不断计数,译码器根据计数器的输出值依次选通不同的输出端口,从而实现 LED 的顺序点亮。
三、实验设备及材料1、数字电路实验箱2、 74LS161 计数器芯片3、 74LS138 译码器芯片4、发光二极管(LED)若干5、电阻、电容等基本电子元件6、杜邦线若干7、数字万用表8、示波器四、实验步骤(一)电路设计1、根据实验原理,在实验箱上规划好芯片的布局和连线方式。
2、使用杜邦线将计数器、译码器和 LED 等元件按照设计好的电路连接起来。
3、注意连接的正确性,避免短路和断路现象。
(二)硬件搭建1、仔细对照电路设计图,将芯片插入实验箱的相应插槽中。
2、确保芯片引脚与插槽接触良好,无松动现象。
(三)编程与调试1、使用数字电路实验箱提供的编程工具,对计数器和译码器进行编程设置。
2、例如,设置计数器的计数模式、初始值等参数。
3、打开电源,观察 LED 的亮灭情况。
4、如果流水灯效果不符合预期,使用数字万用表和示波器等工具检测电路中的信号和电压,排查故障。
五、实验中遇到的问题及解决方法(一)LED 不亮1、问题描述:接通电源后,所有 LED 均不亮。
2、排查过程:首先检查电源是否正常,然后使用万用表测量芯片引脚的电压,发现计数器芯片没有正常工作。
3-流水灯控制实验需打印
实验三、流水灯控制实验一、实验目的1.掌握keilc51软件与protues软件联合硬仿的调试方法。
2.掌握如何应用程序与查表等方法实现流水灯效果。
3.掌握按键去抖原理及处理方法。
二、实验仪器与设备1、微机一台2、keilc51开发环境,protues软件。
三、实验内容1.用protues设计一流水灯控制电路。
利用P1口控制8个发光二极管L1—L8。
P3.3口接一按键K1。
参考电路下面给出。
其中74LS240为八反相三态缓冲器/线驱动器。
2.用中断或查询方式编写程序,每按一次K1键,演示不同的流水效果。
若用KEY表示按键的次数,则其对应流水效果如下:1.KEY=0:L1—L8全亮;2.KEY=1:L1—L8先全灭,然后自右向左单管点亮,如此循环;3.KEY=2:L1—L8先全灭,然后自右向左依次点亮,如此循环;4.KEY=4:L1—L8先全亮,然后自右向左依次熄灭,如此循环;5.KEY=5:自行设计效果;以上移位及闪烁时间均设置为0.3秒,按动5次按键后,再按键时,流水灯效果从头开始循环。
四、实验原理及步骤1.用protues设计流水灯控制电路;2.在keilc51中编写流水灯控制程序,编译通过后,与protues联调;3.按动K1键,观察是否达到演示效果;4.利用终端和查询两种方式编写程序,比较二者的区别;五、电路设计及调试:(1)实验电路(2).程序设计及调试#include<reg51.h>#define uint unsigned int#define uchar unsigned charuchar i,m=0xfe,n=0xfe,p=0x7f,temp=0; void delay(uint c ){uchar i,j;for(i=0;i<125;i++)for(j=0;j<c;j++);}void main(){IT1=1;EX1=1;EA=1;while(1){if(temp==0){P1=0x00;}if(temp==1){P1=0xff;for(i=0;i<8;i++){m=((m<<1)|(m>>7));P1=m;delay(200);}}if(temp==2){P1=0xff;delay(200);P1=0xfe;for(i=0;i<8;i++){P1=n<<i;delay(200);}}if(temp==3){P1=0x00;delay(200);for(i=0;i<8;i++){P1=(p>>i);delay(200);}}if(temp==4){P1=0xff;delay(200);P1=P1;delay(200);}if(temp==5){P1=0xf0;delay(200);P1=P1;delay(200);}}}void int_1() interrupt 2{EA=0;delay(5);EA=1;temp++;if(temp>=6){temp=0;}}(3)实验调试中遇到的问题:为什么要按键去抖?按键如果不去抖,按键抖动会引起一次按键被误读多次,程序执行效果变乱,导致程序执行没有次序。
流水灯实践学习心得体会doc
流⽔灯实践学习⼼得体会doc流⽔灯实践学习⼼得体会篇⼀:对LED流⽔灯的学习总结单⽚机的学习总结第⼀个实验:⼀、从点亮⼀个发光⼆极管到实现流⽔灯的操作实验报告实验⽬的:(1)知道单⽚机最⼩系统和典型系统(2)知道如何建⽴⼀个⼯程,完成⼀个点亮发光⼆极管的编译和烧写实验器件以及基础知识描述:(1)LED发光⼆极管是⼀种半导体⼆极管,可以把电能转换成光能,有⼀个PN结构成。
(2)晶振:全称为晶体振荡器,其作⽤是产⽣原始的时钟频率,这个频率晶振经过频率发⽣器的放⼤或缩⼩后就成为了电脑中各种不同的总线频率。
(3)IO端⼝的驱动能⼒:每个I/O端⼝允许的做⼤20mA 的灌电流,可以直接驱动LED和继电器;⾼电平输出时⼀般对负载提供电流其提供的电流叫“拉电流”;低电平输出时⼀般是要吸收负载的电流,其吸收的电流叫“灌电流”。
(4)P1.0---P1.7:准双向接⼝(内置上拉电阻),端⼝P1的数据寄存器⽤P1表⽰,端⼝置⼀表⽰⾼电平,设置为0表⽰输出低电平。
(5)如何进⾏程序烧写:5.1、⽤传统的并⾏烧写器5.2采⽤⽬前流⾏的IAP在线下载程序,STC的单⽚机可以不要编程器,通过USB或串⼝下载程序(6)延时函数:每条指令都占有⼀定的时间,如果让机器什么都不⼲机器就会延时,外加循环此数⼀个完整的点亮LED源代码程序如下:#includeSbit LED=P1^0;void main(){LED=1;LED=0;While(1)}有这⼀个简单的程序实现使p1^0端⼝控制的LED灯点亮,如果要实现多个灯同时点亮呢?可以定义多个端⼝,使之输出低电平即可://实现第1、3、5、7个LED灯点亮#includesbit LED0=P1^0;sbit LED2=P1^2;sbit LED4=P1^4;sbit LED6=P1^6;main(void){LED0=0;LED2=0;LED4=0;LED6=0;while(1){}}实现了控制灯亮暗后,程序中添加⼀段延时程序即可实现灯的闪烁:延时函数分为有参延时和⽆参延时;//⼀个简单的有参延时函数:void delay(unsigned int t){While(--t);}//⽆参延时函数:void delay(){for(int i=1000;i>0;i++)for(int j=1000;j>0;j++);}或者: void delay(){Unsigned int i=300;While(--i);}通过进⼀步的分析可以进⾏流⽔灯的设计:设计⽬的:从实际⼯程出发,在理论和实践上掌握流⽔灯系统的基础组成,⼯作原理。
实验1_流水灯实验
实验1 流水灯实验一、实验目的1) 简单I/O 引脚的输出2) 掌握软件延时编程方法 3) 简单按键输入捕获判断 二、实验实现的功能1) 开机是点亮全部12个发光二极管,闪烁三下;2) 按下不同的按键12个发光二级管按照不同的方式显示。
具体显示规则如下:1) 1号键按下,按照顺时针循环依次点亮发光二极管; 2) 2号键按下,按照逆时针循环依次点亮发光二极管;3) 3号键按下,按照顺时针间隔1个依次点亮发光二极管; 4) 4号键按下,按照逆时针间隔1个依次点亮发光二极管; 5) 5号键按下,按照顺时针间隔2个依次点亮发光二极管; 6) 6号键按下,按照逆时针间隔2个依次点亮发光二极管;三、系统硬件设计 1、系统原理框图2、系统硬件原理图D 1D 2D 3R N 11k123456789101112242322212019181716151413D 4D 5D 6D 7D 8D 9D 10D 11D 12P 22P 21P 20P 26P 25P 24P 23P 06P 05P 04P 27P 07V C CR 21kR 31kP 36S W 1S W 2S W 3S W 4S W 5S W 6P 32P 33P 37P 34R 1710k R 1810k R 1910kV C C80C51时钟部分电源与复位部分12个发光二极管键盘系统四、系统软件设计本次实验的主要部分是:确定发光二级管点亮规律和检测按键的动作。
其中发光二级管点亮规律通过给定的数组来确定,而检测按键,采用查询方式实现,详细程序如下:#include<stc10.h>#define uint unsigned int #define uchar unsigned char bit flag1=0; uchar f1,f=0; void main() {void Delay1ms(uint ms);uchar key(uchar f);uchar led[12]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xef,0xdf,0xb f,0x7f}; //表示各发光二级管 uchar key_value[6]={0,1,2,3,4,5}; uint num[6]={0,0,0,0,0,0};char type[6]={1,-1,2,-2,3,-3}; //分别表示顺时针、逆时针、间隔一个正逆时针、间隔两个正逆时针 uchar i;P2=0xff; //关闭D1——D8 P0=P0|0xf0; //关闭D9——D12Delay1ms(100); //延时方便清晰看到LED 闪烁现象 for(i=0;i<3;i++) //亮灭3次,中间间隔若干时间 { P2=0;//点亮D1——D8U 1S T C 10F 08XP S E N29A L E 30V C C 40E A 31X 119X 218R S T 9P 0.0/A D 039P 0.1/A D 138P 0.2/A D 237P 0.3/A D 336P 0.4/A D 435P 0.5/A D 534P 0.6/A D 633P 0.7/A D 732P 1.0/T 21P 1.1/T 2E X 2P 1.2/E C I 3P 1.3/C E X 04P 1.4/C E X 15P 1.5/C E X 26P 1.6/C E X 37P 1.7/C E X 48P 2.0/A 821P 2.1/A 922P 2.2/A 1023P 2.3/A 1124P 2.4/A 1225P 2.5/A 1326P 2.6/A 1427P 2.7/A 1528P 3.0/R X D 10P 3.1/T X D 11P 3.2/IN T 012P 3.3/IN T 113P 3.4/T 014P 3.5/T 115P 3.6/W R 16P 3.7/R D17C 330pC 430p X 111.0592MX 1X 2R 151kR 2010k单片机最小系统部分C 110u FD 13C 2104V C CV C CV C CC 510u FC M A XJ1C O N 28C12345678910111213141920212223242526272815161718P 02P 01P 00P 06P 05P 04P 03P 07P 23P 22P 21P 20P 27P 26P 25P 24D 5D 6D 7D 8D 1D 2D 3D 4W 1D 9W 4W 3W 2D 12D 11D 10P 23P 22P 21P 20P 25P 24P 31P 30P 27P 26P 35P 34P 33P 32P 37P 36P 03P 02P 01P 00P 07P 06P 05P 04P 13P 12P 11P 10P 15P 14X 2X 1P 17P 16P 11P 10R S T P 15P 14P 13P 12P 17P 16P 35P 34P 33P 32H 1H 2P 37P 36L 1L 2L 3EFG D P CBADV C CJ6C O N 40A 12345678910111213141516171819202122232425262728293031323334353637383940S W 8R S TP0=P0&0x0f; //点亮D9——D12Delay1ms(500); //延时P2=0xff; //关闭D1——D8P0=P0|0xf0; //关闭D9——D12Delay1ms(500); //延时}while(1){f1=key(f); //传递键值if((f1!=f)||(flag1))//判断是否有键按下,不管两次按键的键值是否相等,只要有键按下,都从D0重新开始循环{f=f1; //交换新键值num[f]=0; //从D0开始循环flag1=0; //标志位清零}if(num[f]%12<8) //先依次亮前8个{P2=led[num[f]%12];P0=P0|0xf0; //关闭D9——D12}else //再依次亮后4个{P0|=0xf0;P0&=led[num[f]%12];P2=0xff; //关闭D1——D8}Delay1ms(100);//num[f]=num[f]+type[f]; //点亮type[f]所对应模式的下一个LEDswitch(num[f]) //保证循环连续一致{case 65535:num[f]=65531;break;case 65534:num[f]=65532;break;case 65533:num[f]=65529;break;default: break;}}}void Delay1ms(uint ms) //@11.0592MHz {uchar i,j;uint k;for(k=0;k<ms;k++){i = 11;j = 190;do{while (--j);} while (--i);}}uchar key(uchar s) //按键扫描子函数{uchar flag=s;uchar k,i,p3;flag1=0;k=0x7f; //行扫描初值for(i=0;i<2;i++) //扫描行{P3=k;Delay1ms(5);p3=P3; //判断哪一列的键按下switch(p3&0x1c){case 0x18: flag=i*3;flag1=1;break;case 0x14: flag=i*3+1;flag1=1;break;case 0x0c: flag=i*3+2;flag1=1;break;default: break;}if(flag1)break;else k=k>>1|0x80;}return flag;}五、实验过程中遇到的问题及解决方法1.由于这个实验是第一个实验因此遇到了不少的问题。
发光二极管流水灯实验报告
实验一发光二极管流水灯实验
一、实验目的:
1.通过AT89C51单片机控制8个发光二极管,八个发光二极管分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮。
开始时P0.0→P0.1….→P0.7,实现亮点以1HZ频率循环移动。
2.用PROTEUS 设计,仿真以AT89C51为核心的发光二极管流水灯实验装置。
3.掌握发光二极管的控制方法。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
四、源程序设计:
1.程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R1,#08H ;8个发光二极管,循环8次点亮
MOV A,#0FEH ;共阳接法,低电平点亮
LOOP: ;循环依次点亮
MOV P0,A ;输出到P0口点亮二极管
RL A
ACALL DELAY ;调用延时
DJNZ R1,LOOP ;判断8个二级管是否都点亮过
SJMP MAIN ;若8个二极管都循环点亮一次,则重新依次点亮
DELAY:MOV R2,#10 ;延时1S
DEL3:MOV R3,#200
DEL2:MOV R4,#125
DEL1:NOP
NOP
DJNZ R4,DEL1
DJNZ R3,DEL2
DJNZ R2,DEL3
RET
END。
8255流水灯实验((
8255流水灯实验((1)设计题目分析编写程序,使用8255的A 口和B 口均为输出,实现16位流水灯显示效果2)功能扩展i:将流水灯设计成可以正着流水,也可以倒着流水ii:通过开关对流水灯闪烁的速度进行控制,高电平时为快,低电平时为慢速2)总体方案设计分析要求用8255的A 口和B 口做为输出,接16个发光二极管,从而实现16位流水灯的显示效果,基本的界限可如下图A所示,在C 口的地两位接两个开关,实现两个扩展功能的控制。
i:基本流水灯显示电路A 口和B 口两个端口不能同时复制,从而在试验中可以用BX进行需要复制的数据的存储,因为BX可以分从BH BL两个部分进行独立的操作,在本次试验中用BH对A 口进行赋值,用BL对B 口进行赋值,通过演示一段时间再对BH BL进行移位和输出,实现流水灯的效果。
ii:正反方向选择把PC.0 口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.0为高电平的时候则灯进行左移,同时 B 口与A 口相反。
iii:快慢速度控制把PC.1 口接在开关上,编写程序对C端口的数据进行读取,并进行判断,使得当PC.1为高电平的时候则延时的时间缩短,使得流水灯的流水速度加快,低电平的时候则进行延时的时间变长,使得流水灯的流水速度加快。
3硬件原理设计A该模块的WR.RD分别练到PC总线接口模块的XIOW和XIOR B该模块的数据(AD0~AD7 )、地址线(A0~A7)分别连到PC 总线接口模块的数据(D0~D7 )、地址线(A0~A7 )C 8255模块选通线CA连到PC总线接口模块的IOY3D 8255的PA0~PA7连到发光二极管的L1~L8;8255的PB0~PB7连到发光二极管的L9~L16E 8255的PC0 PC1分别练到开关K0 K1F软件流程框图及程序清单图A实验中肮凶的连按设置控制字,对A 口B 口赋匾分别保存在BH BUBH右移左移卩*保护现场程序代码MY8255_A EQU 09860HMY8255_B EQU 09861HMY8255_C EQU 09862H MY8255_MODE EQU 09863H CODE SEGMENTASSUME CS:CODESTART:MOV DX,MY8255_MODEMOV AL,81HOUT DX,ALMOV CL,0XOR BX,BXMOV DX,MY8255_BMOV AL,0FEHMOV BL,ALOUT DX,ALMOV DX,MY8255_AMOV AL,7FHMOV BH,ALOUT DX,ALA1:ROL BL,1ROR BH,1A3:PUSH BXCALL BREAKCALL DELAYPOP BXMOV DX,MY8255_AMOV AL,BHOUT DX,ALMOV DX,MY8255_BMOV AL,BLOUT DX,ALMOV DX,MY8255_C IN AL,DX AND AL,01HJNZ A2JMP A1A2:ROL BH,1ROR BL,1JMP A3 ;设置A 口、B 口方式0 输出,C 口低四位方式0 输出; 将BX 清零;对A 口、B 口赋值,并将值保存在BH BL中;对BH BL做出相应的移位;保护现场; 调用任意键退出程序; 调用延时程序;恢复现场;将移位后的结果输出;将C 都的数据输入; 查看PC0 口是否有数据输入,改变流水灯的方向;结果不全为0,则跳转MOV CX,0FFFHK1:MOV BX,0FFFH K2:DEC BXCMP BX,1000HJNE K2MOV DX,MY8255_CIN AL,DXAND AL,02HJNZ K3LOOP K1K3:RET DELAY ENDP BREAK PROC NEAR MOV AH,06H MOVDL,0FFHINT 21HJE RETURNMOV AX,4C00H INT 21H RETURN:RET BREAK ENDP CODE ENDSEND START ;将C 口的数据输入;查看PC1 是否有输入,改变延时,使得延时的时间变快结果不全为0.则跳转;按任意键退出。
单片机实验报告流水灯双机通信交通灯定时时钟
实验一流水灯实验一、实验目的1)简单 I/O 引脚的输出2)掌握软件延时编程方法3)简单按键输入捕捉判断二、实验实现的功能1)开机是点亮 12 发光二极管,闪耀三下2)依据顺时针循环挨次点亮发光二极管3)经过按键将发光二极管的显示改为顺逆时针方式三、系统硬件设计流水灯原理图四、系统软件设计演示程序按键正转闪耀反转五、实验过程中碰到的问题及解决方法1) 每次循环不论正转仍是反转程序,总先是先履行P1 口的 8 位 led 灯。
原由:在利用 KEIL 自带的库函数中的 _crol_ 和_cror_ 时,在正转和反转程序中应当调动次序的,开始没注意到。
更正后显示正常。
2)在开始实验的时候推行的是向来循环的方式,利用按键嵌套。
以后发现不理想,每次按键按到三次以上后进入死循环。
解决方案:利用一个按键,显示一次。
并加入按键开释,防备误动作。
指导老师署名:日期:实验一程序 :/******************************************************************** **************工程说明:本工程主要达成了一下功能:1,复位后演示全部功能2,灯闪耀三次3,流水灯正转4,流水灯反转函数说明:yanshi() :演示程序dengss() :闪耀程序right():正转程序left():反转程序scankey() :按键扫描********************************************************************* **************/#ifndef _led_h#define _led_h#define uint unsigned int#define uchar unsigned charuchar i,j,a,b,c,d;uchar flag=0;//亮灯判断标记uchar aa,bb,cc,dd,ss;sbit H1=P3^6;sbit key1=P0^5;sbit key2=P0^6;sbit key3=P0^7;void delay(uint);//1ms 延时void yanshi(void);//演示全部亮灯方式void dengss(void);//闪耀三次void left(void); //左循环亮灯void right(void);//右循环亮灯void scankey(); //按键扫描#endif#include"stc10.h"#include<intrins.h>#include<led.h> //包含各样变量定义及函数申明main(){yanshi();delay(2000); //两秒后进入可控大循环while(1){scankey();if(flag==0)right();if(flag==1)left();if(flag==2)dengss();}}void delay(uint x){uint i,j;for(i=110;i>0;i--)for(j=x;j>0;j--);}void yanshi(){dengss();right();left();P2=0XFF;P3=0XFF;}void dengss(){for(ss=3;ss>0;ss--)P2=0;P3=0xc3;delay(1000);P2=0xff;P3=0xff;delay(1000);}flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void right(){aa=0xfe;for(a=8;a>0;a--){P2=aa;aa=_crol_(aa,1);delay(500);}bb=0xfb;P2=0xff;//熄灭循环后亮着的for(b=4;b>0;b--){P3=bb;bb=_crol_(bb,1);delay(500);}//D12 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void left(){cc=0xdf;for(c=4;c>0;c--){P3=cc;cc=_cror_(cc,1);delay(500);P3=0xff;// 熄灭 D9dd=0x7f;for(d=8;d>0;d--){P2=dd;dd=_cror_(dd,1);delay(500);}//D1 保存发亮flag+=3;//退出小循环,只亮一次,增大按键扫描频次}void scankey(){H1=0;if(key1==0){delay(10);if(key1==0){flag=0;while(!key1);//等候按键开释}}if(key2==0){delay(10);if(key2==0){flag=1;while(!key2);//等候按键开释}}if(key3==0){delay(10);if(key3==0){flag=2;while(!key3);//等候按键开释}}}实验二准时器或实不时钟实验一、实验目的1)数码管动向显示技术2)准时器的应用3)按键功能定义二、实验实现的功能1) 经过按键能够设定准不时间,启动准时器,准不时间到,让12 个发光二极管闪耀,达成准时器功能。
实验五 流水灯的设计
实验五流水灯的设计一、实验目的1、了解流水灯的工作原理。
二、实验原理及内容实验原理要完成本实验,首先必须了解流水灯的原理。
所谓的流水灯实际上就是由多个LED发光二极管构成的电路,当发光二极管可以依次点亮时,即能呈现流水的效果。
实验内容1、设计能带8个LED发光管发光,并按照要求轮流发光,产生流水灯的流动效果。
2、应具有两种以上不同风格的流动闪亮效果。
比如依次点亮或者依次熄灭。
(选作)3、有起动、停止控制键。
(选作)4、有流动闪亮效果选择设置键。
(选作)5、对所编写的电路进行编译及正确的仿真。
三、实验条件Quartus II实验环境四、实验与仿真顶层文件如下:Cp为时钟信号R为异步清零端。
当r=1时清零。
S[2..0]为输入端。
根据s的不同取值来实现不同的功能。
D[7..0]为预制数Q[7..0]为输出功能表如下VHDL编码如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic isport(clk,enb:in std_logic;ared,agreen,ayellow,bred,bgreen,byellow:buffer std_logic;acounth,acountl,bcounth,bcountl:buffer std_logic_vector(3 downto 0));end traffic;architecture one of traffic isbeginprocess(clk,enb)variable lightstatus:std_logic_vector(5 downto 0);beginif(clk'event and clk='1')thenlightstatus:=ared&agreen&ayellow&bred&bgreen&byellow;if((acounth="0000" and acountl="0000") or(bcounth="0000" and bcountl="0000"))thencase lightstatus iswhen "010100"=>lightstatus:="001100";acountl<="0101";acounth<="0000";bcountl<="0101";bcounth<="0000"; when"001100"=>if(enb='1')thenlightstatus:="100010";acountl<="0000";acounth<="0011";bcountl<="0101";bcounth<="0010";elselightstatus:="010100";acountl<="0101";acounth<="0100";bcountl<="0000";bcounth<="0101"; end if;when "100010"=>lightstatus:="100001";acountl<="0101";acounth<="0000";bcountl<="0101";bcounth<="0000";when"100001"=>lightstatus:="010100";acountl<="0101";acounth<="0100";bcountl<="0000";bcounth<="0101";when others=>lightstatus:="010100";acountl<="0101";acounth<="0100";bcountl<="0000";bcounth<="0101";end case;elseif(acountl="0000")thenacounth<=acounth-1;acountl<="1001";elseacountl<=acountl-1;end if;if(bcountl="0000")thenbcounth<=bcounth-1;bcountl<="1001";elsebcountl<=bcountl-1;end if;end if;end if;ared<=lightstatus(5);agreen<=lightstatus(4);ayellow<=lightstatus(3);bred<=lightstatus(2);bgreen<=lightstatus(1);byellow<=lightstatus(0); end process;end one;仿真:右移:依次点亮灯左移:依次点亮灯循环右移:循环点亮循环左移:循环点亮。
流水灯实验报告
流水灯实验报告课程名称:LED流水灯实验报告学院:xxxxx学院专业:姓名:学号:年级:任课教师:【正文】一、实验的背景和意义单片机全称叫单片微型计算机,是一种集成在电路芯片,是采用大规模集成电路技术把CPU随机存储器RAM、只读存储器ROM、多种输入输出口、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的应用。
大致可以分为以下几个范畴: 1、在智能仪器仪表上的应用,例如精确的测量设备;2、在工业控制中的应用,例如用单片机可以构成形式多样的控制系统,与计算机互联网构成二级控制系统等;3、在家用电器中的应用,可以从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话、集群移动通信、无线电话对讲机等;4、在医用设备中的应用,例如医用呼叫机、各种分析仪、超声诊断设备及病床呼叫系统等等;5在各种大型电器中的模块化作用,如音乐集成单片机,看是简单的功能,微缩在电子芯片中,就需要复杂的类似于计算机的原理。
本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发计算器设计做了详细的分析和研究。
本系统就是充分利用了8051芯片的I/O引脚。
系统已采用MCS—51系列单片机为中心器件来设计LED流水灯系统,实现LED左循环显示,并实现循环的速度可调。
二、设计目的1.学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2.掌握汇编语言程序和C 语言程序设计方法。
3.培养实践技能,提高分析和解决实际问题的能力。
三、设计任务及要求 1.用个发光二极管作为显示电路 2.实现LED 动态显示 3.能连续循环显示 四、 设计思路LEDLED如果要让接在P1.0口的LED1亮起来,相反,如果要让接在P1.0口的LED1熄灭,那么只需要把P1.0口的电平变为高电平就可以了;同理,接在P1.1—P1.7口的其他7个LED 的点亮的熄灭的方法同LED1。
创意流水灯实验报告(3篇)
第1篇一、实验背景随着科技的不断发展,电子技术已经渗透到我们生活的方方面面。
其中,LED流水灯作为一种新型照明产品,因其节能、环保、色彩丰富等特点,在装饰照明、广告宣传等领域得到了广泛应用。
为了深入了解LED流水灯的工作原理,提高我们的动手实践能力,我们设计并完成了一项创意流水灯实验。
二、实验目的1. 了解LED流水灯的工作原理。
2. 掌握LED流水灯的电路连接方法。
3. 通过创意设计,提高LED流水灯的观赏性和实用性。
三、实验原理LED流水灯是通过将多个LED灯珠串联或并联,通过控制电路的通断来实现流水效果的。
实验中,我们采用PWM(脉冲宽度调制)技术来控制LED灯的亮度,从而实现流水灯的动态效果。
四、实验器材1. LED灯珠:红、绿、蓝各50颗2. 马达:1台3. 电阻:若干4. 线路板:1块5. 电源:9V直流电源6. 剪刀、胶带等辅助工具五、实验步骤1. 设计电路图:根据LED灯珠的参数,设计出合适的电路图,确保电路连接正确。
2. 制作电路板:按照电路图,将LED灯珠、电阻、马达等元器件焊接在电路板上。
3. 连接电源:将电路板与9V直流电源连接,确保电路板供电正常。
4. 制作流水灯外壳:根据设计要求,制作流水灯外壳,确保内部电路布局合理。
5. 测试流水灯效果:接通电源,观察LED灯珠的流水效果,检查电路是否正常工作。
6. 优化设计:根据实验效果,对流水灯的设计进行优化,提高观赏性和实用性。
六、实验结果与分析1. 实验结果:经过多次测试,我们成功制作出了一款具有流水效果的LED流水灯。
在实验过程中,LED灯珠的流水效果稳定,颜色鲜艳,马达运行正常。
2. 结果分析:通过本次实验,我们掌握了LED流水灯的工作原理和电路连接方法。
在实验过程中,我们了解到PWM技术在控制LED灯亮度方面的应用,以及马达在流水灯中的驱动作用。
3. 优化建议:为了提高流水灯的观赏性和实用性,我们可以在以下几个方面进行优化:(1)增加LED灯珠的种类和数量,丰富流水灯的色彩效果。
流水灯的实验
1.广告灯的左移右移1.实验任务做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
2.电路原理图图4.4.13.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
每次送出的数据是不同,具体的数据如下表1所示表15.程序框图图4.4.26.汇编源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,A LCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ; D1: MOV R6,#20D2: MOV R7,#248 DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H> unsigned char i; unsigned char temp; unsigned char a,b;void delay(void) {unsigned char m,n,s; for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--); }void main(void){while(1){temp=0xfe;P1=temp;delay();for(i=1;i<8;i++) {a=temp<<i;b=temp>>(8-i);P1=a|b;delay();}for(i=1;i<8;i++) {a=temp>>i;b=temp<<(8-i);P1=a|b;delay();}}}2.多路开关状态指示1.实验任务如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。
LED流水灯实验报告
EA/VPP允许访问片外存储器/编程电源线,他可控制单片机使用片内ROM还是还是使用片外ROM,若EA为1允许使用片内ROM,为0则允许使用片外ROM。
七、实验过程
下载程序:
程序下载成功
程序检测
新建文本文档(程序)
#include "reg52.h"
本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发计算器设计做了详细的分析和研究。本系统就是充分利用了8051芯片的I/O引脚。系统已采用MCS—51系列单片机为中心器件来设计LED流水灯系统,实现LED左循环显示,并实现循环的速度可调。
二、设计目的
1.学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。
在此我们还需注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令时的时间很短,我们在控制二极管亮灭的时候应该延迟一段时间,否则我们就看不到“流水”的效果了。
五、模块介绍
采用AT89C51作为主控芯片,将P1分别接8个LED实现显示,采用汇编语言编程和C语言实现。方案框图如下:
图2.1
六、元件清单
元件
如果要让接在P1.0口的LED1亮起来,那么只需要把P1.0口的电平变为低电平就可以了;相反,如果要让接在P1.0口的LED1熄灭,那么只需要把P1.0口的电平变为高电平就可以了;同理,接在P1.1—P1.7口的其他7个LED的点亮的熄灭的方法同LED1。因此,只要使接在单片机上的八个LED灯在接通电源后除了最右端一个其余都亮,一秒后倒数第二个熄灭其余都亮,如此循环往复,就可以达到流水的效果。
AT89C51芯片外形结构和引脚分布图
实验二 发光二极管实验1
实验二发光二极管实验一、实验目的1、掌握AT89C51 单片机IO 口的输入输出。
2、掌握用查表方式实现AT89C51 单片机IO 口的控制。
3、练习单片机简单延时子程序的编写。
4、熟练运用Proteus 设计、仿真AT89C51 系统。
二、实验原理1、单片机最小系统由单片机芯片、时钟电路以及复位电路构成。
2、I/O 口P0 口:8 位双向I/O 口。
在访问外部存储器时,P0 口可用于分时传送低8 位地址总线和8 位数据总线。
能驱动8 个LSTTL 门。
P1 口:8 位准双向I/O 口(“准双向”是指该口内部有固定的上拉电阻)。
能驱动4 个LSTTL门。
P2 口:8 位准双向I/O 口。
在访问外部存储器时,P2 口可用于高8 位地址总线。
能驱动4 个LSTTL 门。
P3 口:8 位准双向I/O 口。
能驱动4 个LSTTL 门。
P3 口还有第二功能。
P1 口作为输出口时与一般的双向口使用方法相同。
当P1 口用为输入口时,必须先对它置“1”。
若不先对它置“1”,读入的数据可能是不正确的。
三、设计步骤:【PROTEUS 电路设计】在ISIS 中进行电路图设计,发光二极管流水灯实验装置电路原理图如下图所示。
1、按照元件清单从PROTEUS 库中选取元器件,进行第2、3、4、5、6 步,完3、放置电源和地;4、连线;5、参照原理图进行元件属性设置;6、电气检查。
【源程序设计】1、流程图:2、在KeilC 中进行源程序设计:3、编译、生成目标代码【PROTUES 仿真】1、在AT89C51 属性页中加载KeilC 中生成的目标代码;2、仿真、调试代码3、注意使用观察窗口三、背景知识(供实验内容题一所用)KeilC 调试软件延时方法:1、首先打开“Options for Target”页面,在“Xtal(MHz)”中输入选择的晶振频率。
我们观察这两个变量,通过调整延时循环控制参数,可以得到需要的精确延时时间。
单片机实验LED流水灯实验
LED流水灯实验一、实验内容将LED灯逐个点亮,然后全亮,全灭。
二、实验原理8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,用一个八位二进制的左移和右移来确定灯的亮灭,并用定时器延时。
三、描述该实验中运用的理论知识1、LED的点亮:8个LED发光二极管,分别对应单片机IO口的P0.0到P0.7口,8个单片机IO口组成一个字节,在程序编写过程中,可以直接用P0来进行操作。
2、流水效果:C语言的8位二进制数代表了8个IO口,左移,最低位填0,然后按位取反,就可以将灯逐个点亮3、延时:特殊功能寄存器TMOD,如图T1和T0分别代表单片机两个计数器。
GATE:该位被置位时为门控位。
仅当TR1被置位并且INT1脚为高,定时器开始计数。
当该位被清零时,只要TR1被置位,定时器1马上开始计数。
C/T:该位为0的时候,用作定时器,该位为1的时候,用做计数器。
0.5秒的延时12 * (65536- x)/11059200 = 0.001四、实验步骤1、流程图2、结果程序:#include <reg52.h>typedef unsigned char uint8;typedef unsigned int uint16;sbit ENLED = P1^4;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;main(){uint8 counter;uint16 i,j;ENLED = 0;ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;TMOD = 0x01;TH0 = 0xB8;TL0 = 0x00;TR0 = 1;while(1){if(1 == TF0){TF0 = 0;TH0 = 0xB8;TL0 = 0x00;counter++;}if(25 == counter){counter = 0;if(8 == j){P0 = 0X00;for(i=0;i<=38000;i++);P0 = 0XFF;for(i=0;i<=38000;i++);j = 0;}P0 = ~(1 << j++);}}}。
流水灯测试实验报告
流水灯测试实验报告一、实验目的本实验旨在通过设计并搭建流水灯电路,并进行测试,验证电路设计的正确性和流水灯效果实现的可行性。
二、实验材料- Arduino开发板- 面包板- LED发光二极管- 杜邦线三、实验原理流水灯是一种常见的LED灯效,其通过一组LED灯依次点亮和熄灭,形成一个像水流般流动的效果。
本实验中,使用了Arduino开发板作为控制器,通过Arduino的数字IO口与LED发光二极管相连。
利用Arduino的高低电平输出和延时函数,我们可以控制LED的点亮和熄灭。
四、实验步骤1. 将Arduino开发板插入面包板的相应位置,并连接好电源。
2. 将LED发光二极管连接到面包板上,并与Arduino的数字IO口相连。
注意将正极连接到IO口,负极连接到GND。
3. 打开Arduino开发环境,新建一个项目。
4. 在项目中编写代码,利用Arduino的`digitalWrite()`函数控制IO口的高低电平,从而控制LED的点亮和熄灭。
代码示例如下:cint ledPin = 2; 定义LED灯所连接的IO口void setup() {pinMode(ledPin, OUTPUT); 将LED灯所连接的IO口设置为输出模式}void loop() {digitalWrite(ledPin, HIGH); 点亮LED灯delay(500); 延时500msdigitalWrite(ledPin, LOW); 熄灭LED灯delay(500); 延时500ms}5. 将Arduino开发板与计算机通过USB线连接,并上传代码到开发板中。
6. 测试LED灯是否按照预期效果点亮和熄灭。
若效果符合要求,则实验成功。
五、实验结果与分析经过实验,我们成功实现了流水灯的效果。
LED灯依次点亮和熄灭,形成了一个流动的效果。
通过调整延时函数的参数,我们可以改变LED灯点亮和熄灭的速度。
实验结果表明,所设计的电路和代码能够正确地控制LED灯的点亮和熄灭,实现了流水灯效果。
单片机流水灯实验报告
实物展示:
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配0料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高高与中中带资资负料料荷试试下卷卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并中3试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
实验一—基本输出(发光二极管流水灯实验)
实验一基本输出—发光二极管流水灯实验1.1 实验目的1. 通过AT89C52单片机控制8个发光二极管,实现以一定的时间由低位到高位循环点亮。
2.用Protues设计、仿真以AT89C52为核心的发光二极管流水灯实验装置。
3.掌握发光二极管的控制方法。
1.2 PROTUES电路设计发光二极管流水灯实验装置电路原理图如图1-1所示。
图1-1 发光二极管流水灯实验装置电路原理图1.3 实验内容1.从PROTUES库中选取元器件① AT89C52:单片机;② RES、RX8;电阻、8排阻;③ LED-YELLOW:黄色发光二极管;④ CAP/CAP-ELEC:电容、电解电容;⑤ CRYSTAL:晶振。
若已知元件名称,则以名称为关键字从库中取出该元器件。
2.放置元器件3.放置电源和地(终端)4.连线5.元器件属性设置6.电气检测1.4 程序设计1.流程图流水灯程序流程如图1-2所示。
图 1-2 流水灯程序流程图2.源程序设计C程序设计:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar temp;void delay(uint z){uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);}void main(){temp=0xfe;P1=temp;while(1){delay(500);temp=_crol_(temp,1);P1=temp;}}汇编程序设计:ORG 0000HSJMP MAINORG 0100HMAIN:MOV P1,#0FFHMOV A,#0FEHL1:MOV P1,ALCALL DELAYRL ASJMP L1DELAY:MOV R2,#5L3:MOV R3,#200L2:MOV R4,#250DJNZ R4,$DJNZ R3,L2DJNZ R2,L3RETEND1.5 PROTUES仿真发光二极管流水灯仿真图如图1-3所示。
实验一 花样流水灯
实验报告一实验名称:花样流水灯实验目的:熟悉MCU组装及STC ISP和keil软件的使用;学习子程序的编写和使用。
实验原理:P1口相当于真正的双向口,输入时需先将口置1,每根口线可以独立输入或输出。
本实验延时子程序采用指令循环来实现系统板上硬件连线把“单片机系统”区域中的P2.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
实验现象:每盏流水灯每隔0.1S自下往上,后又自上往下循环点亮流动. 实验原理图如下:流程图如下所示:程序如下:;-------------------------------------------------------; 流水灯(8个发光二极管循环点亮); 功能:流水灯(8个发光二极管循环以1S间隔点亮);------------------------------------------------------- ORG 0000H ;伪指令,指定程序从0000H开始存放LJMP MAIN ;跳转指令,程序跳转至MAIN处执行ORG 0030H ;伪指令,指定程序从0030H开始存放MAIN: MOV SP, #60H ;给堆栈指针赋初值LIGHT: MOV R4,#08 ;设置循环次数MOV A,#0FEH ;给A赋初值LOOP: RR A ;将A的值右移一位MOV P1,A ;将A的值赋给P1口LCALL DEL1S ;调用1S延时子程序DJNZ R4,LOOP;判断R4是否为0,不为0跳转,为0顺序执行 LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行;1S延时子程序(11.0592MHz,误差0)DEL1S: MOV R5, #089HDL1S0: MOV R6, #0A4HDL1S1: MOV R7, #013HDJNZ R7, $DJNZ R6, DL1S1DJNZ R5, DL1S0RETEND ;程序结束指令。
流水灯实验报告
流水灯实验报告课程名称:LED流水灯实验报告学院:xxxxx学院专业:姓名:学号:年级:任课教师:【正文】一、实验的背景和意义单片机全称叫单片微型计算机,是一种集成在电路芯片,是采用大规模集成电路技术把CPU随机存储器RAM、只读存储器ROM、多种输入输出口、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的应用。
大致可以分为以下几个范畴: 1、在智能仪器仪表上的应用,例如精确的测量设备;2、在工业控制中的应用,例如用单片机可以构成形式多样的控制系统,与计算机互联网构成二级控制系统等;3、在家用电器中的应用,可以从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话、集群移动通信、无线电话对讲机等;4、在医用设备中的应用,例如医用呼叫机、各种分析仪、超声诊断设备及病床呼叫系统等等;5在各种大型电器中的模块化作用,如音乐集成单片机,看是简单的功能,微缩在电子芯片中,就需要复杂的类似于计算机的原理。
本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发计算器设计做了详细的分析和研究。
本系统就是充分利用了8051芯片的I/O引脚。
系统已采用MCS—51系列单片机为中心器件来设计LED流水灯系统,实现LED左循环显示,并实现循环的速度可调。
二、设计目的1.学习基本理论在实践中综合运用的初步经验,掌握电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2.掌握汇编语言程序和C 语言程序设计方法。
3.培养实践技能,提高分析和解决实际问题的能力。
三、设计任务及要求 1.用个发光二极管作为显示电路 2.实现LED 动态显示 3.能连续循环显示 四、 设计思路LEDLED如果要让接在P1.0口的LED1亮起来,相反,如果要让接在P1.0口的LED1熄灭,那么只需要把P1.0口的电平变为高电平就可以了;同理,接在P1.1—P1.7口的其他7个LED 的点亮的熄灭的方法同LED1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一发光二极管流水灯实验一、实验目的:1.通过AT89C51单片机控制8个发光二极管,八个发光二极管分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮。
开始时P0.0→P0.1….→P0.7,实现亮点以1HZ频率循环移动。
2.用PROTEUS 设计,仿真以AT89C51为核心的发光二极管流水灯实验装置。
3.掌握发光二极管的控制方法。
二、PROTEUS电路设计:三、程序部分#include<reg51.h>sbit control = P3^7;void delay(int z){int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){int i,tmp;control = 0;P0 = 0xef;delay(1000);for(i=1;i<=7;i++){tmp = P0;P0 = (tmp>>1)+ 0x80;delay(1000);}}实验二开关控制LED数码管实验一、实验目的:1.通过AT89C51读入4位开关K1、K2、K3、K4的输入状态,并按照二进制编码关系0-F输出到数码管显示。
(如K4K3K2K1全部按下,则显示F;若只有K2按下,则显示2。
)2.掌握LED数码管的静态显示。
3.掌握I/O口的控制方法。
二、PROTEUS电路设计:三、程序部分#include<reg51.h>unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,}; unsigned char KEY;void main(){while(1){KEY = P2;switch(KEY){case 0xff:P0 = table[0];break;case 0xfe:P0 = table[1];break;case 0xfd:P0 = table[2];break;case 0xfc:P0 = table[3];break;case 0xfb:P0 = table[4];break;case 0xfa:P0 = table[5];break;case 0xf9:P0 = table[6];break;case 0xf8:P0 = table[7];break;case 0xf7:P0 = table[8];break;case 0xf6:P0 = table[9];break;case 0xf5:P0 = table[10];break;case 0xf4:P0 = table[11];break;case 0xf3:P0 = table[12];break;case 0xf2:P0 = table[13];break;case 0xf1:P0 = table[14];break;case 0xf0:P0 = table[15];break;default :break;}}}实验三外中断优先级实验一、实验目的:1.理解单片机中断优先级和优先权。
2.用PROTEUS 设计,仿真基于AT89C51单片机的中断优先级实验。
3.掌握中断编程方法。
单片机主程序控制P0口数码管循环显示0~8;外中断0、外中断1发生时分别在P2口、P1口依次显示0~8。
通过实验可演示高优先级可中断低优先级,但低优先级的中断请求不能中断高优先级。
二、PROTEUS电路设计:三、程序部分#include<reg51.h>unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};// 共阳数码管的段码void delay(int z) //延时子程序,大约1ms{int x,y;for(x=110;x>0;x--)for(y=z;y>0;y--);}int i0=0,i1=0; // 用于中断0,1显示数码管的变量void main(){int i;EX0 = 1; //开外部中断0EX1 = 1; //开外部中断1IT0 = 1;IT1 = 1;PX0 = 1;PX1 = 0;EA = 1; //开总中断while(1){for(i=0;i<9;i++) //P0 循环显示0~8{P0 = table[i];delay(200);}}}void int0()interrupt 0 // 外部中断0优先级高于外部中断1 ,中断号为 0{for(i0=0;i0<9;i0++) //显示0~8{P2 = table[i0];delay(200);}}void int1()interrupt 2 //外部中断1,中断号为2{for(i1=0;i1<9;i1++) //显示0~8{P1 = table[i1];delay(200);}}实验四 60S倒计时实验一、实验目的:1.通过AT89C51的定时器实现60S倒计时,显示采用两位数码管动态显示。
2.用PROTEUS 设计,仿真基于AT89C51单片机的60S倒计时实验。
二、PROTEUS电路设计:三、程序部分#include<reg52.h>sbit GE = P2^1;sbit SHI = P2^0;int count = 0,number = 60;unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};void delay(int z);void display();void main(){EA = 1;ET0 = 1;TMOD = 0X01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;TR0 = 1;while(1){display();}}void delay(int z){int x,y;for(x=110;x>0;x--)for(y=z;y>0;y--); }void display(){SHI = 0;GE = 1;P1 = table[number%10];delay(10);GE = 0;SHI = 1;P1 = table[number/10];delay(10);}void time_count() interrupt 1{TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;count++;if(count == 20){count = 0;number--;if(number < 0)number = 59;}}实验五矩阵式键盘的设计一、实验目的:1.掌握键盘设计中按键识别的原则。
2.用PROTEUS 设计一个常规4×4的矩阵键盘。
3.键盘编码规则自己定义,分别对应数字键0-9、A-F,按下对应的按键显示在数码管上显示对应的数据。
二、PROTEUS电路设计:三、程序部分#include<reg51.h>sbit show_1 = P1^0;sbit show_2 = P1^1;sbit show_3 = P1^2;sbit show_4 = P1^3;unsigned char j,k,temp,key;unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,};void delay(unsigned char i);void display(unsigned char num);void key_scan();void main(){while(1){key_scan();display(key);}}void delay(unsigned char i) {for(j=i;j>0;j--)for(k=110;k>0;k--);}void display(unsigned char num) {P0=table[num];show_4 = 0;}void key_scan(){P2=0xef;temp=P2;temp=temp&0x0f;if(temp!=0x0f){delay(10);if(temp!=0x0f){temp=P2;switch(temp){case 0xe7:key=0;break;case 0xeb:key=1;break;case 0xed:key=2;break;case 0xee:key=3;break;}while(temp!=0x0f){temp=P2;temp=temp&0x0f; }display(key);}}P2=0xdf;temp=P2;temp=temp&0x0f;if(temp!=0x0f){delay(10);if(temp!=0x0f){temp=P2;switch(temp){case 0xd7:key=4;break;case 0xdb:key=5;break;case 0xdd:key=6;break;case 0xde:key=7;break;}while(temp!=0x0f) {temp=P2;temp=temp&0x0f; }display(key);}}P2=0xbf;temp=P2;temp=temp&0x0f;if(temp!=0x0f){delay(10);if(temp!=0x0f){temp=P2;switch(temp){case 0xb7:key=8;break;case 0xbb:key=9;break;case 0xbd:key=10;break;case 0xbe:key=11;break;}while(temp!=0x0f){temp=P2;temp=temp&0x0f;}display(key); }}P2=0x7f;temp=P2;temp=temp&0x0f;if(temp!=0x0f){delay(10);if(temp!=0x0f){temp=P2;switch(temp){case 0x77:key=12;break;case 0x7b:key=13;break;case 0x7d:key=14;break;case 0x7e:key=15;break;}while(temp!=0x0f){temp=P2;temp=temp&0x0f;}display(key);}}}实验六 AD转换程序设计一、实验目的:1.掌握转换器ADC0809的使用。