本程序的pdf格式的原理图下载: http://www.51hei.com/f/ks51.pdf  ,是在51hei单片机开发板上面做的,只需要看数码管部分的原理图即可 其他的可以忽略.

/**

***********************************************************************************

* @file    :  main.c

* @author  :  xr

* @date    :  2014年4月16日10:04:27 - 2014年4月16日11:09:50

* @version :  V1.2.3

* @brief   :  数码管交通灯 TrafficLight  单片机STC89C52RC MCU  晶振 11.0592MHZ

***********************************************************************************

*/

#include

//74HC138

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

//数码管编码真值表

unsigned char code LedTable[] = {

0xC0,  //"0"

0xF9,  //"1"

0xA4,  //"2"

0xB0,  //"3"

0x99,  //"4"

0x92,  //"5"

0x82,  //"6"

0xF8,  //"7"

0x80,  //"8"

0x90,  //"9"

0x88,  //"A"

0x83,  //"B"

0xC6,  //"C"

0xA1,  //"D"

0x86,  //"E"

0x8E   //"F"

};

//数码管显示缓冲区+LED小灯显示缓冲区

unsigned char LedBuff[7] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

unsigned char thr0, tlr0;//Timer0定时初值高低字节

bit flag1s = 0;

unsigned char timer = 0;//倒计时时间

enum TrafficLightColor

{

GREEN = 0, YELLOW = 1, RED = 2

};

static enum TrafficLightColor color = GREEN;//定义枚举变量color,表示红绿黄灯,开始时是黄灯

/****************function definition************************/

void TrafficLight();

void ConfigTimer0(unsigned int xms);

void Initial();

/*主程序main()*/

void main(void)

{

Initial();

ConfigTimer0(1);//定时1ms

while (1)

{

if (flag1s)

{

flag1s = 0;

TrafficLight();//每过1s进行交通灯的切换或timer的倒计时,并分解timer到缓冲区

}

}

}

/*初始化*/

void Initial()

{

ADDR3 = 1;

ENLED = 0;//选择U3,即选择数码管显示+LED显示

P0 = 0xFF;

}

/*定时器T0配置*/

void ConfigTimer0(unsigned int xms)

{

unsigned long tmp;

tmp = 11059200/12;//机器周期频率

tmp = tmp * xms /1000;//定时xms需要的计数值(f*T=计数个数)

tmp = 65536-tmp+18;//定时xms装入的初值

thr0 = (unsigned char)(tmp >> 8);//重载值高字节

tlr0 = (unsigned char)tmp; //重载值低字节

TMOD &= 0xF0;//清零T0控制位

TMOD |= 0x01;//T0工作方式1,16位可设定时模式

TH0 = thr0;

TL0 = tlr0;//装入初值

TR0 = 1;

ET0 = 1;

EA  = 1;

}

/*交通灯的红绿黄灯的切换和倒计时值的设定*/

void TrafficLight()

{

//首先判断timer倒计时时间是否到了0,若到了0就进行红绿黄交通灯的切换,否则进行倒计时

if (timer == 0) //倒计时到0,进行交通灯的切换

{

switch (color)

{

case GREEN:  color = YELLOW; LedBuff[6] = 0xE7; timer = 2;//绿灯切换到黄灯,LED6和LED5作为绿灯,倒计时3s

break;

case YELLOW: color = RED; LedBuff[6] = 0xFC; timer = 29;//黄灯切换到红灯,LED3和LED2作为红灯,倒计时30s

break;

case RED:    color = GREEN; LedBuff[6] = 0x3F; timer = 45;//红灯切换到绿灯,LED9和LED8作为绿灯,倒计时46s

break;

default: break;

}

}

else

{

timer--;//倒计时

}

/*分解timer并存放到数码管缓冲区*/

LedBuff[0] = LedTable[timer % 10];

LedBuff[1] = LedTable[timer / 10 % 10];

}

/*数码管刷新*/

void LedCharRefresh()

{

static unsigned char j = 0;//刷新索引

P0 = 0xFF;//消隐

//   switch (j)

//   {

//   case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0;

// break; //LEDS0 = 0;点亮第一个数码管

// case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1;

// break;

// case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0;

// break;

// case 3: ADDR2 = 0; ADDR1 = 1; ADDR0 = 1;

// break;

// case 4: ADDR2 = 1; ADDR1 = 0; ADDR0 = 0;

// break; //LEDS4 = 0;点亮第5个数码管

// case 5: ADDR2 = 1; ADDR1 = 0; ADDR0 = 1;

// break; //LEDS5=0;点亮第6个数码管

// case 6: ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;

// break; //LEDS6=0;选中LED小灯

// default : break;

//   }

P1 &= 0xF8;//清零P1口的低三位

P1 |= j;//低三位控制三八译码器工作,同时刷新6个数码管和LED小灯

P0 = LedBuff[j++];

if (j >= 7)

j = 0; //j 0->6

}

/*定时器T0中断服务*/

void Timer0_ISP() interrupt 1

{

static unsigned int counter = 0;//计数器

TH0 = thr0;

TL0 = tlr0;//重新装入初值

counter++;

LedCharRefresh();//刷新数码管和小灯

if (counter >= 1000) //1s

{

counter = 0;

flag1s = 1;

}

}

C语言交通灯数码管,51单片机数码管交通灯程序相关推荐

  1. 51单片机c语言编写计算器仿真,基于51单片机的计算器设计c程序代码加proteus仿真...

    可实现加减乘除各类运算,带有清零复位功能 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 0.png (24.71 KB, 下载次数: 9) 2019-1-10 04:05 上传 程序 ...

  2. 51单片机LED模拟交通灯

    51单片机LED模拟交通灯 文章目录 51单片机LED模拟交通灯 实验环境 仿真图 代码解析 效果演示 实验环境 实验软件: Keil5 + Proteus7 实验元件: AT89C51 * 1, L ...

  3. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...

    /********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...

  4. 基于51单片机十字路口红绿灯交通灯+紧急模式

    基于51单片机十字路口红绿灯交通灯 +无黄灯+紧急 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J010 目录标题 基于51单片机十字路口红绿灯交 ...

  5. 基于51单片机的十字路口交通灯系统

    1 设计名称 基于51单片机的十字路口交通灯系统(C语言.Proteus开发环境) 2 设计要求 1. 基于51系列单片机设计一个十字路口交通灯控制系统,用于模拟道路十字路口交通灯实际运行的场景. 2 ...

  6. 基于51单片机十字路交通灯仿真_黄灯闪烁_正常模式+夜间模式+紧急模式

    基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 目录 基于51单片机十字路交通灯仿真_黄灯闪烁+夜间+夜间 演示视频 基本功能: 仿真图 程序 程序代码 程序讲解 倒计时的产生 红黄绿灯状态处理 ...

  7. 51单片机数码管显示60秒倒计时(C语言)

    51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...

  8. B003 - 基于51单片机的蓝牙交通灯车流量控制系统

    摘要 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊.那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统.交通信号灯控制方式很多.本系统采用STC89C52单片机以及单片机最小系 ...

  9. 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档

    51单片机数码管显示实验 实验内容: 编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复. C语言程序 #include #de ...

最新文章

  1. 【精华】【经典】自动化循环操作方法当前网页方法,可以用于本地化AI智能自动抓取网页资源信息,类似爬虫功能
  2. leetcode算法题--最大正方形
  3. jupyter中中文显示不正常_jupyter 中文乱码设置编码格式 避免控制台输出的解决...
  4. 函数式接口作为方法的返回值类型案例
  5. 【读书笔记】计算机是怎样跑起来的
  6. 网站开发中敏感信息加密
  7. java对象的状态由什么表示_持久化层的Java对象可处于哪些状态?这些状态有哪些特征?...
  8. ajax escape用法,ie11下ajax用escape发送中文参数失败
  9. 4.2 set和multiset
  10. 移动零售批发行业新的技术特色-智能PDA手持移动扫描打印销售开单收银仪!!...
  11. linux7 vnc 黑屏,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  12. SIEBEL功能组件,eScript入门
  13. php 日期转换为大写
  14. 漫画英语作文怎么写 计算机,漫画英文作文怎么写
  15. Altium Designer 相同模块的布局布线操作
  16. 在WIN2003安装TD8,问题汇总
  17. 关于PotPlayer不支持S/W HEVC(H.265)解码,亲测有效
  18. 直播网站源码,使用nodejs显示HTML页面
  19. 头条golang面试题
  20. 一起拼团更划算,小区团购怎么做?分享经验!

热门文章

  1. HTTPS 为什么是安全的 _ (下),flutter登录注册
  2. 江苏省2021年新高考适应考试成绩查询,2021年江苏省新高考适应性考试成绩查询时间...
  3. Windows msc文件
  4. 有了Socket协议,为什么还要Websocket协议?
  5. SEO吸引用户访问网站的方法是什么?
  6. H5仿微信界面教程(一)
  7. sudo or gosu
  8. mysql workbench 特性_MySQL Workbench的使用方法(图文)
  9. 苹果手机如何恢复删除的照片
  10. @Test注解没法运行,解决方法