首页 > 编程知识 正文

基于单片机的流水灯设计报告,51单片机流水灯课程设计

时间:2023-05-06 15:35:59 阅读:45314 作者:1870

三个键: a键启动、b键控制不同流水速度(低中高)、c键

设计思路1 (未使用中断) :

8个LED灯断开正极电源,负极电源连接单片机I/O端口。

死循环:将P2端口设置为11111110,并使用左移函数循环7次。

同时在每次移位的中途添加延迟函数。

3个按钮: a按钮启动,b按钮控制不同流水速度(低中高),c按钮控制流水灯暂停,使蜂鸣器长鸣。

想法1 )设定变量I。 最初按0、a键为1,I为1,进入死循环时

设定变量j,按b、j,j大于3时,j=j-3; 使用j*1000,来空房子循环函数的延迟时间。 设定bit变量s=0,按下键c、s,s=1、j进入循环蜂鸣器的响铃,在s=0时退出循环。

每次延迟都检查密钥

# includereg 52.h # includeintrins.htypedefunsignedintu 16; 类型无符号化char u8; u8 j=1; #定义指示灯p2sbit k1=P3 ^ 1; sbit K2=P3^0; sbit K3=P3^2; sbit BUZ=P1^5; voiddelayk(u16I )//延迟函数快,{while(I--}; }void delay ()//延迟函数) {void key2); void key3 (; u16 y; 交换机(j ) case1:for(y=10000; y0; y--({key2); key3 ); }break; case2:for(y=20000; y0; y--({key2); key3 ); }break; case3:for(y=40000; y0; y--({key2); key3 ); }break; }}void key2() if ) K2==0) ) Delayk ) 1000 ); if(K2==0) j; (if ) J3 ) { j=j-3; }}while (! K2 ); }void key3 () ) u8I; if(k3==0) delayk(1000 ); if(K3==0) I=1; while(I ) {BUZ=0; while(K3==1I==1) if (k3==0) delayk (1000 ); if(k3==0) I=0; BUZ=1; while (! K3; }}}}}}}void pamadeng () u8I; wile(1) { key2); key3 ); LED=0XFE; //1111 1110延迟(; for(I=0; i7; I () {key2); key3 ); LED=_crol_(LED,1 ); 延迟(; } }}void main () while) ) if ) k1==0) ) Delayk ) 1000 ); if(k1==0) {pamadeng; } }设计思路2:((中断使用) ) ) ) ) ) ) ) )。

最初为0,按a键则设定为1的变量I。 当I在1进入死循环时

设定变量j,按b进入中断2,j大于3时,j=j-3; 使用j*1000,在空屋循环函数暂停时间到来。 设定bit变量s=0,按下键c,进入外部中断0、s,s=1、j进入循环蜂鸣器,在s=0时退出循环。

# includereg 52.h # includeintrins.htypedefunsignedintu 16; 类型无符号化char u8; 类型字节u1; #定义led p2 sbit k1=P3 ^ 0; //2号开关sbit K2=P3^3; //4号开关sbit K3=P3^2; //3号开关sbit BUZ=P1^5; //蜂鸣器u8 j=1; //k2键voiddelay(u16I ) {while ) I--}; }void open02 ()//外部中断0,2 ) ea=1; //总中断EX0=1; //使外部中断0IT0=1导通//边缘触发方式EX1=1; //打开外部中断的1IT1=1; //边缘触发}void pamadeng () () ) ) ) ) ) ) 652 wile(1) { led=led (指示灯) ) ) ) () ) ) ) ) //11111110Delay () j*20000 ); for(I=0; i7; I ) led=_crol_(led,1 ); dlay () j*20000 ); }}}void main () ) {open02 ); while(1) if ) k1==0) ) Delay ) 1000; if(k1==0) {pamadeng; } }记录void key2(interrupt2//外部中断1、键2次(delay ) 1000 ); //消除抖动if(k2==0) j; if(J3 ) j=j-3; }void ke

y3() interrupt 0 //外部中断0,跑马灯暂停{delay(1000); //消抖if(K3==0){u1 k=1; //用于记录K3按键BUZ=0;while(k){ while(K3==1&&k==1){if(K3==0){delay(1000); //消抖if(K3==0){k=~k;BUZ=1; //关闭蜂鸣器while(!K3); //确认按键松开}}}}}}

学习收获:
单片机:集成电路芯片;计算机部件集成;

模电:
半导体:原子最外层电子4个(既易得电子又易失电子,硅、锗),
二极管:掺杂正极性P,掺杂负极性N。LED,掺杂加入通电发光物质,长脚正,短脚负,正极里面东西小,负极大;稳压管,反接稳压。P中空穴多,P中电子多。但是电场方向是N指向P。
三极管:NPN,B高电平连通(箭头指向外);PNP,B低电平连通。C高,E低(箭头指向内)
场效应管:FET
芯片:www.alldatasheetcn.com
运算放大器,比较器
上面有一横低电平有效,无一横高电平有效

数电:
TTL:5高0低(大于2高,小于0.8低)
COMS:
HVCMOS:3.3高0低(大于1.7高,小于0.7低)
LVCMOS:2.5高0低
RS232电平通信:
负逻辑:+12低电平,-12高电平

Long 32位(51) 32位VC与int无区别 int 16位 short 16位 char 8位
float 32位 double 64位
sbit:特殊功能位声明
bit:位变量声明

ROM 掉电不丢失(只读不写)
RAM 掉电丢失

P3.0 RXD串行口输入
P3.1 TXD串行口输出
(通信)
P3.2 INT0外部中断0输入
P3.3 INT1外部中断1输入
P3.4 T0定时器0外部输入
P3.5 T1定时器1外部输入
P3.6 WR外部写控制
P3.7 RD外部读控制

震荡周期,时钟周期:晶振提供
状态周期:时钟周期的两倍
机器周期:CPU完成一个独立操作;六个状态周期,十二个震动周期
指令周期:CPU完成一条指令所需要的全部时间;每条指令执行时间都是由一个或几个机器周期组成,MCS-51有单,双,四周期指令

对I/O口的控制
上(下)拉电阻,将不确定的信号全部转化高(低)电平

电源电路:
复位电路:高电平复位(上电复位(启动复位),手动复位)
复位电路中电容作用:

电容主要对于上电复位:单片机上电,给电容充电,电路导通,RST高电平,电容充满后,电路不导通,RST 低电平。完成复位

时钟电路:
下载电路:

I/O口

延时函数:
Void delay(unsigned int i)
{
While(i–)
}
当i=1时大概是10微秒

中断:
外部中断0,INT0 P3.2
定时器中断0,T0 P3.4
外部中断1,INT1 P3.3
定时器中断1,T1 P3.5
RX,TX P3.0 P3.1

后期计划:
继续巩固51的学习,同时进入STM32的学习

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。