C语言基础比较薄弱,红绿灯的倒计时和切换上,用了三个if()嵌套,总感觉应该有更好的方案,如果你恰巧知道,请教教我,在此谢过。以下是程序部分:

//红绿灯设计:利用定时器实现LED灯亮灭,数码管倒计时结束后切换led灯

//P2口控制led灯,38译码器选择数码管,P0口控制数码管显示

//定时器初始化设置,定时器溢出一次为10ms,设置一个变量a=99,a从99-->0,正好100次,也就是1s。

#include"reg52.h"

typedef unsigned int uint;      //对数据类型进行声明定义

typedef unsigned char uchar;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

sbit LED0=P2^7;           //红灯

sbit LED1=P2^6;           //绿灯

sbit LED2=P2^5;           //黄灯

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

uchar DisplayData[2];          //创建一个数组,用于存放倒计时的十位和个位

uchar a=99,flag=0,sec=15;  //a:100次等于1秒(配合定时器使用),flag:对应三种灯 sec:倒计时

//延时函数

void delay(uchar i)

{

while(i--);

}

//数码管显示,这里只需要使用两个数码管

//通过138译码器选择对应的数码管

void Digdisplay()

{

uchar i;

for(i=0;i<=1;i++)

{

switch(i)

{

case(0):

LSA=0;LSB=0;LSC=0;break;

case(1):

LSA=1;LSB=0;LSC=0;break;

}

P0=DisplayData[i];        //将当前的时间传递给P0,并显示出来

delay(100);

P0=0x00;                 //消隐

}

}

//将当前的时间和smgduan[]内已保存的16进制值对应,接着会通过Digdisplay()显示

void Datapros()

{

DisplayData[0]=smgduan[sec%10];

DisplayData[1]=smgduan[sec/10];

}

//定时器初始化

void TimerInit()

{

TMOD=0x01;  //选择定时器0

TH0=0Xd8;    //10毫秒

TL0=0Xf0;

EA=1;

ET0=1;

TR0=1;

}

void red()              //红灯倒计时

{

if(flag==0)           //flag初始值为0,从红灯开始亮(红-->绿-->黄)

{

LED2=1;            //黄灯灭

LED0=0;            //红亮

if(a==0)        //a=0,一秒过去,倒计时sec-1

{

a=99;         //重置a,开始下一秒

sec--;         //倒计时sec-1

if(sec==0)     //sec=0,红灯结束,绿灯开始

{

flag=1;      //绿灯的flag

sec=15;      //给绿灯定时

}

}

}

}

void green()        //绿灯

{

if(flag==1)

{

LED0=1;

LED1=0;

if(a==0)

{

a=99;

sec--;

if(sec==0)

{

flag=3;

sec=3;

}

}

}

}

void yellow()            //黄灯

{

if(flag==3)

{

LED2=0;

LED1=1;

if(a==0)

{

a=99;

sec--;

if(sec==0)

{

flag=0;

sec=15;

}

}

}

}

void Timer() interrupt 1       //中断

{

TH0=0Xd8;    //10毫秒

TL0=0Xf0;

a--;             //a的初始值为100,TH0和TL0溢出一次,a-1,a=0时,正好一秒

red();

green();

yellow();

}

void main()

{

TimerInit();

while(1)

{

Datapros();

Digdisplay();

}

}

python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...相关推荐

  1. 普中科技开发板使用说明书_普中科技单片机实验板使用操作说明.pdf

    普中科技单片机实验板使用操作说明 单片机学习的良师益友 好帮手单片机学习套件 -PRECHIN 用手册 普中科技有限公司 P R E C H I N - V 2 . 0 开发板 Version 1.2 ...

  2. 【51单片机】:关于51单片机仿真器(普中科技开发板STC89C51)的疑惑(做个记录)

    学习目标: 由于一些特殊原因,重学51单片机,真是无力吐槽,学把,认真学.         仿真器,最主要的作用是仿真调试,每次检查代码找不到任何问题比如说debug.先全速运行几秒后点击停止,看程序 ...

  3. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测

    如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...

  4. 基于普中科技开发板制作的数码管显示可调时钟

    目录 前言: 模块化代码: 定时器扫描按键代码: 定时器扫描数码管: 主函数main代码: 前言: 功能说明:通过按键1控制模式选择:模式0------时钟显示模式,模式1:------时钟设置模式 ...

  5. 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记

    使用74HC595芯片驱动LED点阵屏的使用笔记 1.控制显示LED点阵屏的思路 2.74HC595芯片的学习 2.1.74HC595芯片是什么? 2.2.74HC595芯片各引脚解释以及分析 2.3 ...

  6. 普中A2开发板红绿灯实验

    ```#include"reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit k3=P3^2; sbi ...

  7. stc89c51单片机音乐盒系统设计_基于51单片机音乐盒课程设计1.doc

    基于51单片机音乐盒课程设计1 课程名称: 微机原理课程设计 题 目: 基于单片机的音乐盒设计 摘要 随着人类社会的发展,人们对视觉.听觉方面的享受提出了越来越高的要求.小小的音乐盒可以给人们带来美好 ...

  8. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

  9. stc89c51单片机音乐盒系统设计_基于STC89C52单片机的七彩迷你音乐盒

    基于STC89C52单片机的七彩迷你音乐盒.在单片机最小系统的基础上,对其他两个I/O口连接硬件电路.P1.0接一个七彩快闪LED灯.P1.5口接一个NPN型三极管的放大电路,再连接一个无源蜂鸣器(用 ...

最新文章

  1. 神经网络基础知识梳理
  2. 【c语言】蓝桥杯算法提高 勾股数
  3. DEDE 5.7分类联动BUG
  4. java 覆盖和隐藏_Java覆盖和隐藏2
  5. android纯白背景加灰,Android背景颜色设置为灰色而不是@android:颜色/白色
  6. vfp如何比较两张表的关键字重复_Access开发中建表的基本原理和规范(上)
  7. C++,Java编程中 标识符 常见命名约定
  8. Ajax解析JSON文件
  9. Java基础——String类(二)
  10. 文都计算机考研辅导班哪个好,考研辅导班哪个好,海文还是文都?
  11. 老杨推荐|初级到高级网工学习渠道最全汇总(建议收藏)
  12. 计算机基础知识大全之硬件篇
  13. amd用不了android studio,解决AMD无法使用Android studio问题
  14. mysql工作原理学习
  15. 2月15日市场游资操作情况以及龙虎榜
  16. 尚硅谷在线教育五:尚硅谷在线教育讲师管理开发
  17. C++中内存块置0的三种方法:memset, ZeroMemory和SecurZeroMemory
  18. 程序员的自我修养--读阮一峰《如何变得有思想》有感
  19. (附源码)计算机毕业设计SSM基于B_S的汽车售后服务管理系统
  20. C++程序设计课程主页-2012级

热门文章

  1. [Baltic2009]Radio Transmission
  2. 虚幻4蓝图快速入门(二)
  3. C# - linq查询现有的DataTable
  4. 关于Jstree节点显示无法收缩的解决办法
  5. AngularJs学习笔记--E2E Testing
  6. php文件改写nodejs,node.js – 提供PHP文件的nodejs,expressjs
  7. android menu item属性,menuitem - Android 4.3菜单项showAsAction =“always”被忽略
  8. 父元素设置overflow: overlay; 或 overflow: scroll; 或 overflow: auto; 如果子元素超出父元素内容,父元素会被子元素超出部分撑大至子元素同样大小
  9. org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 285; cvc-elt.1.a: 找不到元素 ‘beans‘ 的声明。
  10. java生产问题快速定位_生产环境如何快速跟踪、分析、定位问题-Java