久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機數碼管交通燈程序

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月16日   【字體:

本程序的pdf格式的原理圖下載: http://m.zg4o1577.cn/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 <reg52.h>

//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;
}
}

關閉窗口

相關文章

主站蜘蛛池模板: 国产精品国产三级国产aⅴ浪潮 | 久久成人免费 | 日韩精品一区二区三区视频播放 | 美女在线视频一区二区三区 | 91精品国产乱码久久久久久久久 | 日韩精品一区二区三区在线观看 | 免费久久网 | 亚洲成人免费 | 国产一区二区三区在线看 | 国产综合久久久久久鬼色 | 99热激情| 精品美女视频在线观看免费软件 | 91社区视频 | 在线观看免费av网 | 久久精品欧美视频 | 九九色综合 | www.国产91| 亚洲不卡在线视频 | 欧美一级片在线观看 | 亚洲欧美综合 | 黄网站免费在线 | 欧美日韩在线播放 | 久久精品中文字幕 | 亚洲乱码一区二区三区在线观看 | 日韩二三区| 欧美一区二区精品 | 国产精品高清在线 | 久久久久久国产精品久久 | 国产在线视频一区 | 亚洲欧美在线视频 | 天天操狠狠操 | 国产福利精品一区 | 成在线人视频免费视频 | 少妇午夜一级艳片欧美精品 | 精品无码久久久久国产 | 精品国产一区二区三区免费 | 日日碰狠狠躁久久躁婷婷 | 精品一区二区三区在线视频 | 久久成人精品 | 天天曰天天曰 | 亚洲高清av在线 |