社区
疑难问题
帖子详情
单片机单个按键如控制LED灯闪烁和熄灭?
weixin_44740251
2019-03-07 08:59:11
按一下开始闪烁,再按一下灯灭!
...全文
683
回复
打赏
收藏
单片机单个按键如控制LED灯闪烁和熄灭?
按一下开始闪烁,再按一下灯灭!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
单片机
流水
灯
设计.doc
用AT89C51
单片机
实现流水
灯
的
控制
设计 1.引言 目前,一个学习与应用
单片机
的高潮正在工厂、学校及企事业单位大规模地兴起。 学习
单片机
的最有效方法就是理论与实践并重,本文笔者用AT89C51
单片机
自制了一款简 易的流水
灯
,重点介绍了其软件编程方法,以期给
单片机
初学者以启发,更快地成为单 片机领域的优秀人才。 2.硬件组成 按照
单片机
系统扩展与系统配置状况,
单片机
应用系统可分为最小系统、最小功耗 系统及典型系统等。AT89C51
单片机
是美国ATMEL公司生产的低电压、高性能CMOS 8位
单片机
,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计 数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和 0~24MHz工作频率,使用AT89C51
单片机
时无须外扩存储器。因此,本流水
灯
实际上就是 一个带有八个发光二极管的
单片机
最小应用系统,即为由发光二极管、晶振、复位、电 源等电路和必要的软件组成的
单个
单片机
。其具体硬件组成如图1所示。 从原理图中可以看出,如果要让接在P1.0口的
LED
1亮起来,那么只要把P1.0口的电平变 为低电平就可以了;相反, 如果要接在P1.0口的
LED
1
熄灭
,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1 .7口的其他7个
LED
的点亮和
熄灭
的方法同
LED
1。因此,要实现流水
灯
功能,我们只要将 发光二极管
LED
1~
LED
8依次点亮、
熄灭
,8只
LED
灯
便会一亮一暗的做流水
灯
了。在此我 们还应注意一点,由于人眼的视觉暂留效应以及
单片机
执行每条指令的时间很短,我们 在
控制
二极管亮灭的时候应该延时一段时间,否则我们就看不到"流水"效果了。 3.软件编程
单片机
的应用系统由硬件和软件组成,上述硬件原理图搭建完成上电之后,我们还 不能看到流水
灯
循环点亮的现象,我们还需要告诉
单片机
怎么来进行工作,即编写程序
控制
单片机
管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是
单片机
应 用系统中的一个重要的组成部分,是
单片机
学习的重点和难点。下面我们以最简单的流 水
灯
控制
功能即实现8个
LED
灯
的循环点亮,来介绍实现流水
灯
控制
的几种软件编程方法 。 3.1位控法 这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令
控制
P1口的每 一个位输出高低电平,从而来
控制
相应
LED
灯
的亮灭。程序如下: ORG 0000H ;
单片机
上电后从0000H地址执行 AJMP START ;跳转到主程序存放地址处 ORG 0030H ;设置主程序开始地址 START:MOV SP,#60H ;设置堆栈起始地址为60H CLR P1.0 ;P1.0输出低电平,使
LED
1点亮 ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使
LED
1
熄灭
CLR P1.1 ;P1.1输出低电平,使
LED
2点亮 ACALL DELAY ;调用延时子程序 SETB P1.1 ;P1.1输出高电平,使
LED
2
熄灭
CLR P1.2 ;P1.2输出低电平,使
LED
3点亮 ACALL DELAY ;调用延时子程序 SETB P1.2 ;P1.2输出高电平,使
LED
3
熄灭
CLR P1.3 ;P1.3输出低电平,使
LED
4点亮 ACALL DELAY ;调用延时子程序 SETB P1.3 ;P1.3输出高电平,使
LED
4
熄灭
CLR P1.4 ;P1.4输出低电平,使
LED
5点亮 ACALL DELAY ;调用延时子程序 SETB P1.4 ;P1.4输出高电平,使
LED
5
熄灭
CLR P1.5 ;P1.5输出低电平,使
LED
6点亮 ACALL DELAY ;调用延时子程序 SETB P1.5 ;P1.5输出高电平,使
LED
6
熄灭
CLR P1.6 ;P1.6输出低电平,使
LED
7点亮 ACALL DELAY ;调用延时子程序 SETB P1.6 ;P1.6输出高电平,使
LED
7
熄灭
CLR P1.7 ;P1.7输出低电平,使
LED
8点亮 ACALL DELAY ;调用延时子程序 SETB P1.7 ;P1.7输出高电平,使
LED
8
熄灭
ACALL DELAY ;调用延时子程序 AJMP START ;8个
LED
流了一遍后返回到标号START处再循环 DELAY: ;延时子程序 MOV R0,#255 ;延时一段时间 D1: MOV R1,#255 DJNZ R1,$ DJNZ R0,
基于
单片机
的
LED
流水
灯
设计.doc
基于
单片机
的
LED
流水
灯
设计 设计任务 1掌握MCS-51系列8051、8255的最小电路及外围扩展电路的设计方法 2了解
单片机
数据转换功能及工作过程 3设计
LED
流水
灯
系统,实现8个
LED
霓虹
灯
的左、右循环显示 4完成主要功能模块的硬件电路设计 5用proteus软件完成原理电路图的绘制 一 设计方法 本课题使用AT89C51
单片机
时无须外扩存储器。因此,本流水
灯
实际上就是一个带有八个 发光二极管的
单片机
最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必 要的软件组成的
单个
单片机
。 如果要让接在P1.0口的
LED
1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相 反,如果要接在P1.0口的
LED
1
熄灭
,就要把P1.0口的电平变为高电平;同理,接在P1.1 ~P1.7口的其他7个
LED
的点亮和
熄灭
的方法同
LED
1。因此,要实现流水
灯
功能,我们只 要将发光二极管
LED
1~
LED
8依次点亮、
熄灭
,8只
LED
灯
便会一亮一暗的做流水
灯
了。 由 于人眼的视觉暂留效应以及
单片机
执行每条指令的时间很短,我们在
控制
二极管亮灭的 时候应该延时一段时间,否则我们就看不到"流水"效果了。 二 方案论证与比较 2.1循环移位法 在上个程序中我们是逐个
控制
P1端口的每个位来实现的,因此程序显得有点复杂,下面 我们利用循环移位指令,采用循环程序结构进行编程。我们在程序一开始就给P1口送一 个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高 位移动,然后再输出至P1口,这样就实现"流水"效果啦。由于8051系列
单片机
的指令中 只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放 到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现"流水" 效果。具体编程如下所示,程序结构确实简单了很多。 2.2查表法 上面的两个程序都是比较简单的流水
灯
程序,"流水"花样只能实现单一的"从左到右" 流方式。运用查表法所编写的流水
灯
程序,能够实现任意方式流水,而且流水花样无限 ,只要更改流水花样数据表的流水数据就可以随意添加或改变流水花样,真正实现随心 所欲的流水
灯
效果。我们首先把要显示流水花样的数据建在一个以TAB为标号的数据表中 ,然后通过查表指令"MOVC A,@A+DPTR"把数据取到累加器A中,然后再送到P1口进行显 示。具体源程序如下,TAB标号处的数据表可以根据实现效果的要求任意修改。 2.3位控法 这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令
控制
P1口的每 一个位输出高低电平,从而来
控制
相应
LED
灯
的亮灭。 本次实验我们采用的是查表法和循环移位法,这两个方法要比位控法要复杂些,但是程 序要简略的多 三 硬件设计 1
单片机
时钟电路 时钟电路用于产生
单片机
工作所需要的时钟信号,
单片机
本身就是一个复杂的同步时序 电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号
控制
下严格地按时序进 行工作。 在MCS- 51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯 片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器 。 此电路采用12MHz的石英晶体。时钟电路如下图: 2复位电路 电阻的作用是用于上电复位的,VCC以上电,由于电容两端电压不能突变,所以RST上为 高电平,然后电容放电,RST就为低电平了,还可以用手动复位,此电路应用自动复位。 3工作电路 工作电路就是根据总的电路的指令,来反应工作情况。本电路的流水
灯
电路具体的如下 : 根据各个模块的功能及他们的信号传输,连接电路如下: 四 软件设计 汇编语言和C语言的特点及选择 本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环 节。在
单片机
的应用系统程序设计时,常用的是汇编语言和C语言。机硬件,程序可读性 和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵 活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的
控制
语句,程序 设计自由度大,有很好的可重用性,可移植性等特点。在本设计中采用C语言编写软件程 序。 C语言程序设计 特殊功能寄存器P0一共八位,因此P0寄存器可一次存放一字节数据,寄存器的每位的输 出对应P0.0~P0.7引脚,其中P0.0为P0的低位引脚,P0.7为高位引脚。P0引脚输出高低电 平与寄存器P0存放数据一致,如程序中,P0 = 0x01时,则只有P0.0输出高电平,其它引 脚输出低电平。为了实现流水
灯
效果,程序设计让P0的八个引脚依次输出高电平即可。 如先让P0 = 0x01,
LED
1点亮,然后让P0 = 0x02,
LED
2点亮,依次往下操作,P0 = 0x8
用函数型指针
控制
P0端口的8位
LED
流水点亮
用函数型指针
控制
P0端口的8位
LED
流水点亮(包含程序、代码、电路图等)
单片机
仿真设计实训报告.doc
信息与电子工程学院 集中实训报告 课程名称:
单片机
仿真设计实训 实训项目:创意
LED
灯
专 业:电子信息工程 班 级: 姓 名: 学 号: 指导教师: 1. 不要删除行尾的分节符,此行不会被打印 目 录 1实训任务 1 2实训目的 2 3实训要求 3 4 实训内容、步骤和过程 4 4.1实训内容 4 4.1.1设计原理 4 4.1.2 设计原理图 4 4.1.3设计系统框图 5 4.2 实训步骤 5 4.2.1程序 5 4.2.2元件清单 8 4.3 实训过程 9 4.3.1晶振电路模块 9 4.3.2 复位电路模块 9 4.3.2 STC89C52芯片模块 9 4.3.3
LED
灯
模块 10 5 实训取得的结果 11 6. 实训总结和心得体会 12 1实训任务 随着现在科技的快速发展,使得数字系统的硬件设计那样方便快捷,越来越多新奇的 事物出现在大家眼前。 设计一个创意
LED
灯
,使用I/O口
控制
16个
LED
灯
让其按照自己想要的方式进行亮,其 中运用的了
单片机
的知识和以前所学的C语言知识,用C语言进行编程序,然后运用单片 机的开发板进行实现。从而使得制作的创意
LED
灯
进行发光。 十六个
LED
灯
发光的方式如下: 让
LED
1~
LED
8从上到下依次点亮然后八个全亮。 让
LED
9~
LED
16从下到上依次点亮然后八个全亮。 让
LED
1~
LED
16全灭。 让
LED
1亮然后灭然后
LED
2亮然后灭……到
LED
16亮然后灭。 让
LED
16亮然后灭然后
LED
1亮然后灭……到
LED
16亮然后灭。 让
LED
1~
LED
16全亮然后全亮。
LED
1~
LED
4,
LED
13~
LED
16亮然后其余的亮。然后全灭。 亮字母(YTZ)然后十六个
灯
全灭。 2实训目的 1. 熟练掌握C语言会进行编写程序。 2. 熟练
单片机
这门学科,了解创意
LED
灯
的工作原理。 3. 掌握一些基本的电路和逻辑功能设计方法。 4. 了解
单片机
的软件和硬件过程、方法及实现。 5. 掌握
单片机
引脚功能和I/O口的使用。 3实训要求 1. 让十六个
LED
灯
按照自己想要的方式进行亮,本人所选的
LED
灯
均是红色,四×四的点 阵的形式排列,当输入为零的时候亮,输入为一的时候灭,就在亮和灭的时候做成 了创意
LED
灯
。该创意
LED
灯
课程设计一共可以分为四大模块:晶振电路模块、复位 电路模块、STC89C52
单片机
模块、
LED
灯
模块。 2. 设计出系统框图 3. 设计出原理图 4. 编写出
控制
创意
LED
灯
的程序 5. 撰写出实训课程报告 4 实训内容、步骤和过程 1 4.1实训内容 1 4.1.1设计原理 创意
LED
灯
实际上就是一个带有16个发光二极管的
单片机
最小应用系统,即为由发光 二极管、晶振、复位、电源等电路和必要的软件组成的
单个
单片机
。从原理图中可以看 出,如果要让接在P1.0口的
LED
1亮起来,那么只要把P0口的电平变成低电平就好了。相 反把其变成高电平该
LED
就灭了。如果要让接在P2口的
LED
亮起来,那么只要把P0口的电 平变成低电平就好了。相反把其变成高电平该
LED
就灭了。同理,其他的
LED
灯
一样单片 机输入低电平的时候亮高电平灭,要实现流水
灯
的功能,我们只要将
LED
1~
LED
16依次点 亮和
熄灭
。这样一亮一灭就做成了创意
LED
灯
,为了使效果更明显时间延时应该长一点。 否则看不到
灯
的变化效果。 2 4.1.2 设计原理图 图4.1.2 设计原理图 3 4.1.3设计系统框图 图4.1.3 系统框图 2 4.2 实训步骤 1 4.2.1程序 #include
#define uChar8 unsigned char #define uInt16 unsigned int sbit
LED
1 = P0^0; sbit
LED
2 = P0^1; sbit
LED
3 = P0^2; sbit
LED
4 = P0^3; sbit
LED
5 = P0^4; sbit
LED
6 = P0^5; sbit
LED
7 = P0^6; sbit
LED
8 = P0^7; sbit
LED
9 = P2^7; sbit
LED
10 = P2^6; sbit
LED
11 = P2^5; sbit
LED
12 = P2^4; sbit
LED
13 = P2^3; sbit
LED
14 = P2^2; sbit
LED
15 = P2^1; sbit
LED
16 = P2^0; /*延迟函数*/ void DelayMS(uInt16 ValMS) { uInt16 uiVal,ujVal; for(uiVal = 0;uiVal < ValMS;uiVal ++) for(ujVal = 0;ujVal < 113;ujVal ++); } void main(void) { int i,j=500;
《
单片机
中断嵌套小练习》用最简洁的方式学会中断嵌套。
外部中断是
单片机
一个比较重要的部分,这次,用最简单的方法让你去实现中断嵌套的功能,通过下面这个小实验,相信你对中断的认识会更加的深刻。如果还对中断这方面不太了解的话,请看这篇文章。 链接:
单片机
的外部中断link. 功能要求: 主程序功能:
led
灯
灭,八位共阴数码管
熄灭
。 功能:利用
按键
K1,K2触发中断,K1触发使
led
闪烁
8次。K2触发,数码管显示0~F。 要求:K2优先级高于K1,通过Keil和Proteus进行仿真和调试。 数码管的段位编码。 共阳极数码管编码表: unsigned char shumaguan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92
疑难问题
22,206
社区成员
121,730
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章