文章目录

1.实验要求

2.实验原理

3.Keil c51编程

4.Proteus仿真

5.问题及总结

1.编程过程中创建了字符串 code[] ,编译出错

2.LED始终不亮

3.keil中全局替换功能


1.实验要求

编写程序,模拟交通灯,实现以下状态。

状态1:东西方向绿灯亮4s,南北方向红灯亮4s;

状态2:东西方向绿灯闪烁2s,南北方向红灯继续亮2s;

状态3:东西方向绿灯灭,黄灯亮2s,南北方向红灯继续亮2s;

状态4:南北方向红灯灭,绿灯亮4s,东西方向黄灯灭,红灯亮4s;

状态5:南北方向绿灯闪烁,东西方向红灯继续亮2s;

状态6:南北方向绿灯灭,黄灯亮2s,东西方向红灯继续亮2s。


2.实验原理

51单片机的定时计数器有4种工作方式,2种工作模式。

两种工作模式:

1、定时器模式:是对单片机的系统时钟信号经片内12分频后的内部脉冲信号(机器周期)计数。由于时钟频率是定值,所以可根据对内部脉冲信号的计数值可计算出定时时间,即定时时间等于机器周期乘以计数值。通过指令给计数器装入一个初值,即可设置不同的定时时间。

2、计数器模式:是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数,每个机器周期的S5P2对外部输入引脚T0或T1进行采样。若前一机5器周期采样为高电平,后一机器周期采样为低电平,则在下一个机器周期S3P1期间,计数器加1。确认一次负跳变需两个机器周期,即24个时钟周期,因此外部输入的计数脉冲的最高频率为系统时钟频率的1/24。


3.Keil c51编程

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int //定义全局变量:t0为0.5s定时函数的变量;t1为 0.5s*n  (级联时间)定时函数的变量
unsigned char code_play[]={0xf3,0xfb,0xeb,0xde,0xdf,0xdd};
uchar t0 , t1;//***0.5s标准定时函数***
void Delay_0_5s()
{for(t0=0;t0<2;t0++){TH1 = 15536/256;//设定初值TL1 = 15536%256;TR1 = 1;//启动T1while(!TF1);//查询计数是否溢出,即50ms时间到,TF=1TF1 = 0;//50ms时间到,将定时器溢出标志位TF1清零   }
}//*** 0.5s*n(时间级联)函数
void Delay_0_5_ns(uchar t)
{for(t1=0;t1<t;t1++){Delay_0_5s();}
}//***主函数
void main()
{uchar k;TMOD = 0x10;//T1工作方式1(一般固定)EA = 1;//{东西绿亮,南北红亮(1);闪烁(2);东西黄亮,南北红亮(3);东西红亮,南北绿亮(4);闪烁(5);东西红亮,南北黄亮(6)while(1){//状态1:东西绿亮,南北红亮,4sP1 = code_play[0];Delay_0_5_ns(8);//状态2:东西方向绿灯闪烁2s,南北方向红灯继续亮2s(定义闪烁亮灭分别为0.5s)for(k=0;k<2;k++){P1 = code_play[0];Delay_0_5_ns(2);P1 = code_play[1];Delay_0_5_ns(2);         }//状态3:东西黄亮,南北红亮,2sP1 = code_play[2];Delay_0_5_ns(4); //状态4:东西红亮,南北绿亮,4sP1 = code_play[3];Delay_0_5_ns(4);//状态5:南北方向绿灯闪烁,东西方向红灯继续亮2sfor(k=0;k<2;k++){P1 = code_play[3];Delay_0_5_ns(2);P1 = code_play[4];Delay_0_5_ns(2);}//状态6:东西红亮,南北黄亮,2sP1 = code_play[5];Delay_0_5_ns(4);}
}

代码说明:

1.将每个状态用数组形式列出,后面更方便。

2.一般定时器1(16位),采用方式1,要设定初始值。


4.Proteus仿真

仿真图如下:


5.问题及总结

1.编程过程中创建了字符串 code[] ,编译出错

原因: code 为Keil中关键字

补充知识:我们知道,在单片机中一般都有两块存储区域,ROM和RAM,程序代码存储在ROM中,程序要用的变量存储在RAM中 。而 “code”的作用就是将其修饰过的变量存储在ROM中而非RAM 。
在单片机中,RAM空间都比较小,是比较宝贵的。“code”的意义就是将一些初始化后值一直保持不变的变量(如 固定的常数、表格、常量数组、只读常量等)放置于ROM区,从而节省了RAM空间

2.LED始终不亮

原因:

  • 与LED灯串联的电阻过大,例如10k过大,可以修改电阻为300、500欧姆。

  • 电路未能形成真正的连通,电路元件之间(特别是标签导线)要用导线连接

3.keil中全局替换功能

快捷键: Ctrl + H

说明:Replace为替换当前;Replace为替换所有

51单片机|keilc51|实例|定时器中断|简易的交通灯设计相关推荐

  1. 51单片机控制彩色点阵制作沙漏型交通灯

    本文介绍了彩色点阵的使用,以及利用51单片机控制点阵制作的沙漏型交通灯,希望对打算用点阵做课程设计的同学有点帮助. 一.效果展示       二.彩色点阵的使用 彩色点阵有32个引脚,这里以背面图来讲 ...

  2. 51单片机自学笔记定时器中断

    目录 相关寄存器 中断允许寄存器IE 中断优先级寄存器IP 定时器/计数器控制寄存器TCON 定时器/计数器工作模式寄存器TMOD 程序 代码 计算定时器初值 中断函数写法 相关寄存器 中断允许寄存器 ...

  3. 51单片机基础之定时器中断(二)

    TMOD寄存器: 这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作.如图: 代码: #include <reg51.h>sbit LED=P ...

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

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

  5. 基于单片机的交通灯设计

    摘要 本系统由单片机系统.键盘.LED 显示.交通灯演示系统组成.系统包括人行道.左转.右转.以及基本的交通灯的功能.系统除基本交通灯功能外,还具有倒计时.时间设置.紧急情况处理.分时段调整信号灯的点 ...

  6. 从头开始学51单片机之实例2:用定时中断实现流水灯

    一.仿真环境 Proteus8.9 Keil5 二.Proteus模型搭建 具体过程参考上一篇: 从头开始学51单片机之实例1:用Proteus和Keil搭建流水灯模型_Forster-C的博客-CS ...

  7. 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真

    51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 文章目录 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 实验内容 一.实验一 矩阵键盘中断实验 数码管显示 1.仿 ...

  8. 51单片机中的定时器

    文章目录 1 51单片机中的定时器介绍 1.1 定时器的初步认识 1.2 定时器的寄存器 1.3 使用定时器的方法 1.4 定时时间的计算 2 定时器模式1 2.1 定时器模式1原理分析 2.2 使用 ...

  9. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

    1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...

最新文章

  1. react创建新项目
  2. oracle用户新增数据文件,[数据库]20200722_Oracle添加表空间、用户,用户授权
  3. openssh-在win7上的搭建
  4. chrome浏览器开发者模式header请求参数“Request Payload“找不到的问题
  5. 微信支付推出“中秋花灯会”新玩法 点亮花灯享大额提现免费券
  6. 计算机模拟与生态工程,2018年环境生态工程专业分析及就业前景
  7. python类的实例方法必须创建对象后_Python3 类方法,实例方法,静态方法详解...
  8. HDU 1422 重温世界杯 (dp)
  9. 四年级下册英语计算机房和教师办公室的图片,人教版四年级英语下册Unit 1单元知识梳理卷...
  10. SpringBoot系列(9):SpringBoot配置文件详解
  11. 模拟经营游戏框架构思
  12. Java IO流基础
  13. 一起找BUG,谷歌推出全新漏洞悬赏平台
  14. 在Java中为JFrame添加背景音乐
  15. C++ 判断某个年份的生肖
  16. CSS3 仿古墓丽影9菜单界面
  17. 使用 Zadig 交付云原生微服务应用
  18. linux 进程的vss rss uss,内存VSS,RSS,PSS,USS解读
  19. 多分类问题中sklearn的RFECV指定scoring函数
  20. python -不敢表白,不好意思说出来,没关系,7行代码完成自动打印文字

热门文章

  1. IP 的一百种创意玩法,是育碧的套路没错了!
  2. 基于Bert的语义相关性建模
  3. php 药 网站 源码,医药药品医疗保健行业网站织梦模板源码 v5.7
  4. 转文章格式的小PDF软件
  5. shuf 命令: 随机排序文件
  6. install pecl php_PHP安装pecl扩展--通用
  7. java加载pmml模型文件报错_PMML总结与思考PMML模型生成和加载示例
  8. VsCode Eslint 代码检测工具
  9. 超好用的iOS管理软件iMazing2.16.3官方中文版
  10. 在vim下开发php,用VIM做PHP开发环境