一、仿真环境

  • 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:用定时中断实现流水灯相关推荐

  1. 【51单片机入门】点亮多个LED流水灯

    [51单片机&入门]点亮多个LED流水灯 实验环境 功能实现 PCB原理图 代码 要点 仿真 代码 实验环境 Keil C51 Proteus 8.9 功能实现 LED流水灯依次从右向左亮起, ...

  2. 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计

    基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...

  3. c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...

    1. 基于proteus的51单片机开发实例(14)中断嵌套和中断优先级 1.1. 实验目的 在前面实例中我们已经学习了51单片机的定时器/计数器中断,外部中断,通过这些实例,知道了中断电路的设计,中 ...

  4. 从头开始学51单片机之6:定时器/计数器

    6.1 定时器/计数器的结构及工作原理 1. 51单片机定时器/计数器功能 用单片机实现定时的途径 1 软件定时 利用循环程序.靠执行指令消耗时间,实现时间延迟 无需硬件电路,方便.经济 占用CPU时 ...

  5. [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

    这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c 1 /*------------------- ...

  6. 51单片机基础——串口通信发送字符ab控制流水灯

    /* 当串口调试助手发送a时执行5ms流水灯功能, 当串口调试助手发送b时执行50ms流水灯功能 */#include <reg52.h> #include<intrins.h> ...

  7. 从头开始学51单片机之4:C51程序设计基础

    一.单片机的C语言概述 C51语言或C51:基于51系列单片机的C语言或C语言编译器 Keil C51:集程序编辑.编译.连接.目标文件格式转换.调试.模拟仿真等功能于一体 C51程序开发流程:与汇编 ...

  8. 51单片机运用数组和if条件语句完成流水灯和蜂鸣器同步

    文章目录 前言 一.蜂鸣器 二.使用步骤 1.引入库 2.读入数据 总结 一.蜂鸣器 #include "reg52.h"sbit FM=P2^5; main(){ FM=1 // ...

  9. c++程序设计_基于proteus的51单片机开发实例30-模块化程序设计

    1. 基于proteus的51单片机开发实例30-模块化程序设计 1.1. 实验目的 模块化程序设计 不知不觉我们的51单片机开发实例已经进行到第三十篇了,是时候进行一个总结和反思了,总结什么?反思什 ...

最新文章

  1. 这或许是东半球分析十大排序算法最好的一篇文章
  2. EBGAN, LSGAN, BEGAN
  3. 如何使窗体不重复被打开
  4. session、flask session知识的相关收集
  5. overall error
  6. JAVA虚拟机 安全区域_Java虚拟机的内存区域
  7. oracle什么时候用in,Oracle Study之---Oracle IN和NOT IN的使用
  8. 不用Oracle?基于MySQL数据库下亿级数据的分库分表
  9. 你用苹果手机多长时间清理一次内存,怎么清理?
  10. 拓端tecdat:已迁离北京外来人口的数据画像
  11. [转载]物理大神的八卦完整版——大爱物理
  12. excel公式编辑器_数据分析Excel必备技能:数据
  13. 国家企业信用信息公示系统每年申报登录提示账号不存在【山东】
  14. Git 初學筆記 - 指令操作教學
  15. explicit的作用
  16. 高斯过程 (Gaussian Process)
  17. 互联网快讯:中国石化与隆基达成战略合作;极米多款投影产品持续热销;百度网盘青春版正式上线
  18. 获取自然周 自然月 区间
  19. 【芯片驱动】SMG42630的固定步数实现
  20. python定义一个学生类姓名、年龄、性别、成绩、你成绩评价_.定义一个学生类Student,包含三个属性姓名、年龄、性别,创建三个学生对象存入ArrayList集合中。...

热门文章

  1. 大型企业信息安全管理实践(05年第六期)
  2. win10 驱动程序提交微软
  3. .native的使用
  4. Shape的属性介绍及使用
  5. usb显卡linux,绿联外置显卡驱动官方下载
  6. Windows10搭建PHP开发环境
  7. 全球IT业最具影响力100人 中国仅1人
  8. 【codeforces 776C】Molly's Chemicals
  9. 身份证对照户籍地址 三级表
  10. SDF反标为什么没有数值或者与mtm值不一致