从头开始学51单片机之实例2:用定时中断实现流水灯
一、仿真环境
- Proteus8.9
- Keil5
二、Proteus模型搭建
具体过程参考上一篇:
从头开始学51单片机之实例1:用Proteus和Keil搭建流水灯模型_Forster-C的博客-CSDN博客利用Proteus和Keil软件实现简单的流水灯https://blog.csdn.net/changxiaoyong8/article/details/127416368?spm=1001.2014.3001.5501
三、软件代码
#include <reg51.h>#define uchar unsigned charbit ldelay = 0; // 长定时溢出标记
uchar t = 0; // 定时溢出次数time0() interrupt 1 // T0中断函数
{if(++t == 20){t = 0;ldelay = 1; // 刷新长定时溢出标记}TH0 = 0x3c; // 重置T0初值TL0 = 0xb0;}void main()
{uchar code ledp[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};uchar ledi; // 指示显示顺序TMOD = 0x01; // T0,定时器方式,16位TH0 = 0x3c; // 溢出20次 = 1s(12MHz晶振)TL0 = 0xb0;TR0 = 1; // 启动计数EA = ET0 = 1; // 开T0中断while(1){if(ldelay) // 发现有时间溢出标记,进入处理{ldelay = 0; // 清除标记P1 = ledp[ledi]; // 读出一个值到P2口ledi ++; // 指向下一个if(ledi == 8) // 到最后一个灯后换到第一个{ledi = 0;}}}
}
PS:另一种写法:
#include <reg51.h>#define uchar unsigned charbit ldelay = 0; // 长定时溢出标记
uchar t = 0; // 定时溢出次数time0() interrupt 1 // T0中断函数
{if(++t == 20){t = 0;ldelay = 1; // 刷新长定时溢出标记}TH0 = 0x3c; // 重置T0初值TL0 = 0xb0;}void main()
{uchar LED = 0xfe;TMOD = 0x01; // T0,定时器方式,16位TH0 = 0x3c; // 溢出20次 = 1s(12MHz晶振)TL0 = 0xb0;TR0 = 1; // 启动计数EA = ET0 = 1; // 开T0中断while(1){if(ldelay) // 发现有时间溢出标记,进入处理{ldelay = 0; // 清除标记LED = (LED >> 7) | (LED << 1); // 可以实现流水灯右移的效果// LED = (LED >> 1) | (LED << 7); // 可以实现流水灯左移的效果P0 = LED;}}
}
实现流水灯效果还有很多其他方法,这里面只使用两种。
四、仿真结果
1、搭建好的模型:
2、运行效果
test02_LED - Proteus 8.9
从头开始学51单片机之实例2:用定时中断实现流水灯相关推荐
- 【51单片机入门】点亮多个LED流水灯
[51单片机&入门]点亮多个LED流水灯 实验环境 功能实现 PCB原理图 代码 要点 仿真 代码 实验环境 Keil C51 Proteus 8.9 功能实现 LED流水灯依次从右向左亮起, ...
- 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计
基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...
- c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...
1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级 1.1. 实验目的 在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中 ...
- 从头开始学51单片机之6:定时器/计数器
6.1 定时器/计数器的结构及工作原理 1. 51单片机定时器/计数器功能 用单片机实现定时的途径 1 软件定时 利用循环程序.靠执行指令消耗时间,实现时间延迟 无需硬件电路,方便.经济 占用CPU时 ...
- [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c 1 /*------------------- ...
- 51单片机基础——串口通信发送字符ab控制流水灯
/* 当串口调试助手发送a时执行5ms流水灯功能, 当串口调试助手发送b时执行50ms流水灯功能 */#include <reg52.h> #include<intrins.h> ...
- 从头开始学51单片机之4:C51程序设计基础
一.单片机的C语言概述 C51语言或C51:基于51系列单片机的C语言或C语言编译器 Keil C51:集程序编辑.编译.连接.目标文件格式转换.调试.模拟仿真等功能于一体 C51程序开发流程:与汇编 ...
- 51单片机运用数组和if条件语句完成流水灯和蜂鸣器同步
文章目录 前言 一.蜂鸣器 二.使用步骤 1.引入库 2.读入数据 总结 一.蜂鸣器 #include "reg52.h"sbit FM=P2^5; main(){ FM=1 // ...
- c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计
1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...
最新文章
- 这或许是东半球分析十大排序算法最好的一篇文章
- EBGAN, LSGAN, BEGAN
- 如何使窗体不重复被打开
- session、flask session知识的相关收集
- overall error
- JAVA虚拟机 安全区域_Java虚拟机的内存区域
- oracle什么时候用in,Oracle Study之---Oracle IN和NOT IN的使用
- 不用Oracle?基于MySQL数据库下亿级数据的分库分表
- 你用苹果手机多长时间清理一次内存,怎么清理?
- 拓端tecdat:已迁离北京外来人口的数据画像
- [转载]物理大神的八卦完整版——大爱物理
- excel公式编辑器_数据分析Excel必备技能:数据
- 国家企业信用信息公示系统每年申报登录提示账号不存在【山东】
- Git 初學筆記 - 指令操作教學
- explicit的作用
- 高斯过程 (Gaussian Process)
- 互联网快讯:中国石化与隆基达成战略合作;极米多款投影产品持续热销;百度网盘青春版正式上线
- 获取自然周 自然月 区间
- 【芯片驱动】SMG42630的固定步数实现
- python定义一个学生类姓名、年龄、性别、成绩、你成绩评价_.定义一个学生类Student,包含三个属性姓名、年龄、性别,创建三个学生对象存入ArrayList集合中。...