亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
交通燈設計不會中斷 求單片機大神指導下
[打印本頁]
作者:
flyb
時間:
2017-11-6 18:45
標題:
交通燈設計不會中斷 求單片機大神指導下
交通燈設計,不會中斷,自己寫的中斷后停止不在運行,中斷要求如下
若有急救車到達時,兩向交通信號為全紅,以便讓急救車通過。假定急救車通過路口時間為10秒,急救車通過后,交通燈恢復中斷前狀態。以按鍵為中斷申請,表示有急救車通過。
/**************************************************************************************
* 交通燈實驗 *
實現現象:下載程序后,按照視頻操作正確接線,呈現交通燈現象
注意事項:
***************************************************************************************/
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//--定義使用的IO口--//
#define GPIO_DIG P0
#define GPIO_TRAFFIC P1
sbit RED10 = P1^0; //人行道紅燈
sbit GREEN10 = P1^1; //人行道綠燈
sbit RED11 = P1^2;
sbit YELLOW11= P1^3; //南北路//
sbit GREEN11 = P1^4;
sbit RED00 = P3^0; //人行道紅燈
sbit GREEN00 = P3^1; //人行道綠燈
sbit RED01 = P1^5;
sbit YELLOW01= P1^6;
sbit GREEN01 = P1^7;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
u8 DisplayData[8];
u8 Second;
/*******************************************************************************
* 函 數 名 : delay
* 函數功能 : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數 名 : DigDisplay
* 函數功能 : 數碼管動態掃描函數,循環掃描8個數碼管顯示
*******************************************************************************/
void DigDisplay()
{
u8 i;
for(i=0;i<8;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//顯示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//顯示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//顯示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//顯示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//顯示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//顯示第7位
}
GPIO_DIG=DisplayData[i];//發送段碼
delay(100); //間隔一段時間掃描
GPIO_DIG=0x00;//消隱
}
}
/*******************************************************************************
* 函 數 名 : Int0Init()
* 函數功能 : 設置外部中斷0
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Int0Init()
{
//設置INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
/*******************************************************************************
* 函 數 名 : Timer0Init
* 函數功能 : 定時器0初始化
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Second = 1;
Int0Init(); // 設置外部中斷0
Timer0Init();
while(1)
{
if(Second ==106 )
{
Second = 1;
}
//--南北路通行,50秒--//
if(Second < 50)
{
DisplayData[0] = 0x00;
DisplayData[1] = 0x00;
DisplayData[2] = smgduan[(50 - Second) % 100 / 10];
DisplayData[3] = smgduan[(50 - Second) %10];
DisplayData[4] = 0x00;
DisplayData[5] = 0x00;
DisplayData[6] = smgduan[(53 - Second) % 100 / 10];
DisplayData[7] = smgduan[(53 - Second) %10];
DigDisplay();
//--南北路通行--//
GPIO_TRAFFIC = 0xFF; //將所有的燈熄滅
RED00 = 1;
GREEN00 = 1;
GREEN11 = 0; //南北路綠燈亮
GREEN10 = 0; //南北路人行道綠燈亮
RED01 = 0; //東西路紅燈亮
RED00 = 0; //東西路人行道紅燈亮
}
//--黃燈等待切換狀態,3秒--//
else if(Second < 53)
{
DisplayData[0] = 0x00;
DisplayData[1] = 0x00;
DisplayData[2] = 0x3f;
DisplayData[3] = smgduan[(53 - Second) %10];
DisplayData[4] = 0x00;
DisplayData[5] = 0x00;
DisplayData[6] = 0x3f;
DisplayData[7] = smgduan[(53 - Second) %10];
DigDisplay();
//--黃燈階段--//
GPIO_TRAFFIC = 0xFF; //將所有的燈熄滅
RED00 = 1;
GREEN00 = 1;
YELLOW11 = 0; //南北路黃燈亮
RED10 = 0; //南北路人行道紅燈亮
RED01 = 0; //東西路紅燈亮
RED00 = 0; //東西路人行道紅燈亮
}
//--東西路通行--//
else if(Second <103)
{
DisplayData[0] = 0x00;
DisplayData[1] = 0x00;
DisplayData[2] = smgduan[(106 - Second) % 100 / 10];
DisplayData[3] = smgduan[(106 - Second) %10];
DisplayData[4] = 0x00;
DisplayData[5] = 0x00;
DisplayData[6] = smgduan[(103 - Second) % 100 / 10];
DisplayData[7] = smgduan[(103 - Second) %10];
DigDisplay();
//--黃燈階段--//
GPIO_TRAFFIC = 0xFF; //將所有的燈熄滅
RED00 = 1;
GREEN00 = 1;
RED11 = 0; //南北路紅燈亮
RED10 = 0; //南北路人行道紅燈亮
GREEN01 = 0; //東西路綠燈亮
GREEN00 = 0; //東西路人行道綠燈亮
}
//--黃燈等待切換狀態,3秒--//
else
{
DisplayData[0] = 0x00;
DisplayData[1] = 0x00;
DisplayData[2] = 0x3f;
DisplayData[3] = smgduan[(106 - Second) %10];
DisplayData[4] = 0x00;
DisplayData[5] = 0x00;
DisplayData[6] = 0x3f;
DisplayData[7] = smgduan[(106 - Second) %10];
DigDisplay();
//--黃燈階段--//
GPIO_TRAFFIC = 0xFF; //將所有的燈熄滅
RED00 = 1;
GREEN00 = 1;
RED11 = 0; //南北路紅燈亮
RED10 = 0; //南北路人行道紅燈亮
YELLOW01 = 0; //東西路黃燈亮
RED00 = 0; //東西路人行道紅燈亮
}
}
}
/*******************************************************************************
* 函 數 名 : void Timer0() interrupt 1
* 函數功能 : 定時器0中斷函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //給定時器賦初值,定時1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
Second ++;
}
}
復制代碼
VYH]7ZU(ASB2LGS(AQ%XF~F.png
(57.57 KB, 下載次數: 54)
下載附件
2017-11-6 18:45 上傳
作者:
flyb
時間:
2017-11-6 20:20
求指導下
作者:
zl2168
時間:
2017-11-6 21:02
先學理論,打基礎,否則,問題多多,事倍功半。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1