您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页流水灯实验报告

流水灯实验报告

来源:纷纭教育


实验一 流水灯实验

一、实验目的

1) 简单I/O引脚的输出 2) 掌握软件延时编程方法 3) 简单按键输入捕获判断 二、实验实现的功能

1) 开机时点亮12发光二极管,闪烁三下 2) 按照顺时针循环依次点亮发光二极管

3) 通过按键将发光二极管的显示由顺时针改为逆时针方式 三、系统硬件设计

单片机STC10F08XE 1片 发光二极管led 红 4个 黄 4个 绿 4个 按键 6个 复位电路 时钟电路 如下图所示:

四、系统软件设计

- 1 -

C222pFU1X119XTAL1CRYSTAL18XTAL2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617P00P01P02P03P04P05P06P07P20P20P21P22P23P24P25P26P27P30P31P32p33P34P35P36P37C322pFR110k9RSTD1D2P21R21kC110uF293031PSENALEEAR31kD3P22R41k1kD4P23R5R61k12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATC51P24D5D6D7D8D9P25R71kP26R81kP27R91kR141kR151kR161kP32P33D10P36P34D11P37P05P06P07P35D12R101kR171kR111kR121kR181kR131k

#include

#define uint unsigned int #define uchar unsigned char #define N 100 uchar key=0; /*按键设置*/ sbit H1=P3^6; sbit H2=P3^7; sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7;

void delay(uint x) { uint i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); }

void LED(uchar a) { switch(a) {

case 1: P2=0xfe;delay(N);P2=0xff;break; case 2: P2=0xfd;delay(N);P2=0xff;break; case 3: P2=0xfb;delay(N);P2=0xff;break; case 4: P2=0xf7;delay(N);P2=0xff;break; case 5: P2=0xef;delay(N);P2=0xff;break; case 6: P2=0xdf;delay(N);P2=0xff;break; case 7: P2=0xbf;delay(N);P2=0xff;break; case 8: P2=0x7f;delay(N);P2=0xff;break; case 9: P3=0xfb;delay(N);P3=0xff;break;

case 10:P3=0xf7;delay(N);P3=0xff;break; case 11:P3=0xef;delay(N);P3=0xff;break; case 12:P3=0xdf;delay(N);P3=0xff;break; default: break; } }

/*键盘扫描函数*/ uchar scan()

- 2 -

{ H1=0;

H2=0;

L1=1;L2=1;L3=1;

if(L1==0||L2==0||L3==0) {

delay(10); if(L1==0||L2==0||L3==0) { H1=0;H2=1; if(L1==0) key=1; else if(L2==0) key=2; else if(L3==0) key=3; H1=1;H2=0;

if(L1==0) key=4; else if(L2==0) key=5; else if(L3==0) key=6; H1=0;H2=0;

while(L1==0||L2==0||L3==0);

}

}

return key; } void main() { uchar i,y=0; for(i=0;i<3;i++)/*闪三次*/ {

P2=0x00,P3=0xc3; delay(1000); P2=0xff,P3=0xff; delay(1000); }

while(!key)

{

- 3 -

scan();

} key=0;delay(N); /*顺时针转*/ L1: while(1) { if(y>12) y=0; scan(); if(key==1) {

key=0; break; }

LED(y);/*第y个灯亮*/ y++;/*下一个*/ delay(N); }

/*逆时针转*/ while(1) {

if(y<1) y=12; scan(); if(key==1) {

key=0; goto L1; }

LED(y);

delay(N); y--; } }

五、实验过程中遇到的问题及解决方法

问题1:如何实现顺、逆时针依次点亮流水灯?

解决:通过switch语句,并且改变case值是自加还是自减来实现依次点亮流水灯

- 4 -

问题2:当开通上电时,led只亮而没有闪烁三次? 解决:在熄灭led时没有加延时

问题3:一次点亮流水灯时第一个或最后一个灯总是不亮? 解决:case值的设定

问题4:在main函数中间定义的变量无法识别 解决:在main函数开头定义即可

问题5:用for循环执行顺时针循环按下开关后无法返回原点 解决:在程序开始处为变量赋初值即可

指导老师签字:

日期:2013/11/21

- 5 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务