51單片機——交通指示燈控制器設計

設計目標

1、設計一交通燈控制,控制東西方向的紅、黃、綠燈和南北方向的紅、黃、綠燈。
2、可手動控制和自動控制,設置兩個輸入控制開關。
手動/自動開關,通過P11的按鍵輸入控制
3、手動:設置開關P11,兩種情況:紅燈管制(各方向)紅燈,和各個方向都是黃燈閃爍(周期2S)
4、自動:東西綠燈亮5S,南北紅燈亮5S;東西黃燈亮3S,南北紅燈亮3S;東西紅燈亮5S,南北綠燈亮5S;東西紅燈亮3S,南北黃燈亮3S:然后重復剛才過程,不斷循環。

硬件設計

東西向:紅燈:P2_0 綠燈:P2_1 黃燈:P2_2

南北向:紅燈:P2_5 綠燈:P2_6 黃燈:P2_7

按鍵: P1_0 P1_1

代碼實現

軟件延時

void Delay20ms(void)	//@11.0592MHz,用于按鍵消抖
{unsigned char data i, j;i = 216;j = 37;do{while (--j);} while (--i);
}

按鍵部分

void key_read()
{if(P1_0 == 0){Delay20ms();if(P1_0 == 0){mode++;time = 0;sec = 0;}while(!P1_0);}if(P1_1 == 0){Delay20ms();if(P1_1 == 0){flag++;time = 0;sec = 0;}while(!P1_1);}
}

定時器計時部分


void Timer0_Init(void)		//定時器初始化,10ms
{TMOD &= 0xF0;			//設置定時器模式TMOD |= 0x01;			//設置定時器模式TL0 = 0xF0;				//設置定時初始值TH0 = 0xD8;				//設置定時初始值TF0 = 0;				//清除TF0標志TR0 = 1;				//定時器0開始計時ET0 = 1;				//使能定時器0中斷EA = 1;					//使能總中斷
}void Timer0_Isr(void) interrupt 1
{TL0 = 0xF0;				//設置定時初始值TH0 = 0xD8;				//設置定時初始值
}

總代碼

#include <REGX52.H>
#include "intrins.h"/宏定義/
sbit WE_RED = P2^0;//WE相關的為東西向
sbit WE_GREEN = P2^1;
sbit WE_YELLOW = P2^2;
sbit NS_RED = P2^5;//NS相關的為南北向
sbit NS_GREEN = P2^6;
sbit NS_YELLOW = P2^7;/變量定義區/
unsigned char temp = 0;
unsigned char mode = 0;//手動/自動模式切換標志位
unsigned char flag = 0;//手動模式中兩個模式切換標志位
unsigned int time,sec;//函數聲明區//
void Timer0_Init(void);
void Delay20ms(void);
void key_read();void main()
{Timer0_Init();while(1){	key_read();if(mode == 1){if(flag == 0){WE_RED = 0;NS_RED = 0;WE_GREEN = 1;WE_YELLOW = 1;NS_GREEN = 1;NS_YELLOW = 1;}}if(mode == 2)mode = 0;if(flag == 2)flag = 0;}
}void Timer0_Init(void)		//10毫秒@12.000MHz
{TMOD &= 0xF0;			//設置定時器模式TMOD |= 0x01;			//設置定時器模式TL0 = 0xF0;				//設置定時初始值TH0 = 0xD8;				//設置定時初始值TF0 = 0;				//清除TF0標志TR0 = 1;				//定時器0開始計時ET0 = 1;				//使能定時器0中斷EA = 1;
}void Timer0_Isr(void) interrupt 1
{TL0 = 0xF0;				//設置定時初始值TH0 = 0xD8;				//設置定時初始值time++;if(time == 100){sec++;time = 0;}if(mode == 0){if(sec<=5&&sec>0){WE_RED = 0;NS_RED = 1;WE_GREEN = 1;WE_YELLOW = 1;NS_GREEN = 1;NS_YELLOW = 1;}if(sec <= 10 && sec >5){WE_RED = 1;NS_RED = 0;			}if(sec <= 13 && sec > 10){NS_RED = 1;WE_YELLOW = 0;			}if(sec <= 16 && sec > 13){WE_YELLOW = 1;NS_RED = 0;}if(sec <= 21 && sec > 16){NS_RED = 1;WE_RED = 0;}if(sec <= 26 && sec > 21){WE_RED = 1;NS_RED = 0;}if(sec <= 29 && sec > 26){NS_RED = 1;WE_RED = 0;}if(sec <= 32 && sec > 29){WE_RED = 1;NS_YELLOW = 0;}if(sec > 32){NS_YELLOW = 1;sec = 0;}}if(mode == 1&&flag == 1){if(sec<=2){NS_YELLOW = 0;WE_YELLOW = 0;NS_GREEN = 1;WE_GREEN = 1;WE_RED = 1;NS_RED = 1;}if(sec>2 && sec <= 4){NS_YELLOW = 1;WE_YELLOW = 1;}if(sec>4)sec = 0;}
}void key_read()
{if(P1_0 == 0){Delay20ms();if(P1_0 == 0){mode++;time = 0;sec = 0;}while(!P1_0);}if(P1_1 == 0){Delay20ms();if(P1_1 == 0){flag++;time = 0;sec = 0;}while(!P1_1);}
}void Delay20ms(void)	//@11.0592MHz
{unsigned char data i, j;i = 216;j = 37;do{while (--j);} while (--i);
}

仿真,學弟畫的,好使

代碼目前在硬件上面沒有問題,由于社區上傳視頻較為麻煩,Proteus仿真已上傳(也可以私信獲取),大家可以將代碼燒入仿真里面進行相關實驗,也可以自己搭建硬件電路進行測試,后面會給大家更新相關的硬件電路以及其他小項目

ps:綁定資源好像只能綁定一個,另一個大家可以去主頁找一下

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81444.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

神經網絡語言模型(前饋神經網絡語言模型)

神經網絡語言模型 什么是神經網絡&#xff1f;神經網絡的基本結構是什么&#xff1f;輸入層隱藏層輸出層 神經網絡為什么能解決問題&#xff1f;通用近似定理為什么需要權重和偏置&#xff1f;為什么需要激活函數&#xff1f;權重是如何確定的&#xff1f;1. 窮舉2. 反向傳播主…

信息系統項目管理師高級-軟考高項案例分析備考指南(2023年案例分析)

個人筆記整理---僅供參考 計算題 案例分析里的計算題就是進度、掙值分析、預測技術。主要考査的知識點有:找關鍵路徑、求總工期、自由時差、總時差、進度壓縮資源平滑、掙值計算、預測計算。計算題是一定要拿下的&#xff0c;做計算題要保持頭腦清晰&#xff0c;認真讀題把PV、…

unordered_map和unordered的介紹和使用

目錄 unordered系列關聯式容器 unordered_map unordered_map的接口說明 unordered_map的定義方式 unordered_map接口的使用 unordered_map的容量 unordered_map的迭代器 unordered_map的元素訪問 unordered_map的查詢 unordered_map的修改操作 unordered_multimap u…

設計模式7大原則與UML類圖詳解

設計模式7大原則與UML類圖詳解 引言 &#x1f31f; 在軟件工程領域&#xff0c;設計模式和UML&#xff08;統一建模語言&#xff09;是提高代碼質量、增強系統可維護性的重要工具。設計模式提供了解決軟件設計中常見問題的通用方案&#xff0c;而UML則為我們提供了一種可視化的…

計算機視覺與深度學習 | Python實現ARIMA-LSTM時間序列預測(完整源碼和數據)

ARIMA-LSTM混合模型 1. 環境準備2. 數據生成(示例數據)3. 數據預處理4. ARIMA建模5. LSTM殘差建模6. 混合預測7. 結果可視化完整代碼說明1. **數據生成**2. **ARIMA建模**3. **LSTM殘差建模**4. **混合預測**5. **性能評估**參數調優建議擴展方向典型輸出以下是使用Python實現…

Docker部署單節點Elasticsearch

1.Docker部署單節點ES 1.前置條件 配置內核參數 echo "vm.max_map_count262144" >> /etc/sysctl.conf sysctl -w vm.max_map_count262144準備密碼 本文所有涉及密碼的配置&#xff0c;均使用通用密碼 Zzwl2024。 生產環境&#xff0c;請用密碼生成器生成20…

pe文件二進制解析(用c/c++解析一個二進制pe文件)

pe文件二進制解析 c解析pe文件控制臺版本 #include<iostream> #include<windows.h> #include<vector>/*RVA&#xff08;相對虛擬地址&#xff09;與FOA&#xff08;文件偏移地址&#xff09;的轉換1.得到 的值&#xff1a;內存地址 - ImageBase2.判斷是否位…

融智學視域下的系統性認知增強框架——基于文理工三類AI助理賦能HI四階躍遷路徑

融智學視域下的系統性認知增強框架 ——基于文理工三類AI助理賦能HI四階躍遷路徑 一、如何排除50個認知偏差&#xff1a;消除50類偏差的精準矯正系統 1. 技術架構 文科AI&#xff1a; 構建文化語義場&#xff08;Cultural Semantic Field, CSF&#xff09;&#xff0c;通過…

MMDetection環境安裝配置

MMDetection 支持在 Linux&#xff0c;Windows 和 macOS 上運行。它需要 Python 3.7 以上&#xff0c;CUDA 9.2 以上和 PyTorch 1.8 及其以上。 MMDetection 至今也一直更新很多個版本了&#xff0c;但是對于最新的pytorch版本仍然不支持&#xff0c;我安裝的時候仍然多次遇到m…

如何實現k8s高可用

一、控制平面高可用設計 多主節點部署 ? API Server 冗余&#xff1a;部署至少 3 個 Master 節點&#xff0c;每個節點運行獨立的 API Server&#xff0c;通過負載均衡器&#xff08;如 Nginx、HAProxy、云廠商 LB&#xff09;對外提供統一入口。 ? 選舉機制&#xff1a;Sche…

記錄心態和工作變化

忙中帶閑的工作 其實工作挺忙的, 總是在趕各種功能點. 好巧的是iOS那邊因為上架的問題耽擱了一些時間, 從而讓Android的進度有了很大的調整空間. 更巧的是后端那邊因為對客戶端的需求不是很熟悉, 加上Android海外這塊的業務他也是第一次接觸. 所以需要給他留一些時間把各個環節…

JVM 雙親委派機制

一、從 JDK 到 JVM&#xff1a;Java 運行環境的基石 在 Java 開發領域&#xff0c;JDK&#xff08;Java Development Kit&#xff09;是開發者的核心工具包。它不僅包含了編譯 Java 代碼的工具&#xff08;如 javac&#xff09;&#xff0c;還內置了 JRE&#xff08;Java Run…

java開發之異常

一 結構 Throwable分為Exception和error Exception分為RuntimeException&#xff08;運行時異常&#xff09;和其他異常 主動拋出運行時異常和非運行時異常的區別 1、throw RuntimeException&#xff08;或運行時異常的子類&#xff09; 編譯時不會報錯。 2、throw Excepti…

MySQL 中 JOIN 和子查詢的區別與使用場景

目錄 一、JOIN:表連接1.1 INNER JOIN:內連接1.2 LEFT JOIN:左連接1.3 RIGHT JOIN:右連接1.4 FULL JOIN:全連接二、子查詢:嵌套查詢2.1 WHERE 子句中的子查詢2.2 FROM 子句中的子查詢2.3 SELECT 子句中的子查詢三、JOIN 和子查詢的區別3.1 功能差異3.2 性能差異3.3 使用場…

2025年第三屆盤古石杯初賽(智能冰箱,監控部分)

前言 所以去哪里可以取到自己家里的智能家居數據呢&#xff1f;&#xff1f;&#xff1f;&#xff1f; IOT物聯網取證 1、分析冰箱&#xff0c;請問智能冰箱的品牌&#xff1f; [答案格式&#xff1a;xiaomi] Panasonic2、請問智能冰箱的型號&#xff1f; [答案格式&#x…

【強化學習】強化學習算法 - 馬爾可夫決策過程

文章目錄 馬爾可夫決策過程 (Markov Decision Process, MDP)1. MDP 原理介紹2. MDP 建模/實現步驟3. MDP 示例&#xff1a;簡單網格世界 (Grid World) 馬爾可夫決策過程 (Markov Decision Process, MDP) 1. MDP 原理介紹 馬爾可夫決策過程 (MDP) 是強化學習 (Reinforcement L…

用戶現場不支持路由映射,如何快速將安防監控EasyCVR視頻匯聚平臺映射到公網?

一、方案背景? 隨著數字化安防與智能交通管理發展&#xff0c;視頻監控遠程管理需求激增。EasyCVR作為專業視頻融合平臺&#xff0c;具備多協議接入等核心功能&#xff0c;是智能監控的重要工具。但實際部署中&#xff0c;當EasyCVR處于內網且路由器無法進行端口映射時&#…

MODBUS RTU調試助手使用方法詳解

一、軟件簡介 485調試助手是一款常用的串口通信調試工具&#xff0c;專門用于RS-485總線設備的測試、調試和通信監控。它支持多種串口參數設置&#xff0c;提供數據收發功能&#xff0c;是工業現場調試的必備工具之一。 二、軟件安裝與啟動 1. 系統要求 Windows 7/10/11操作…

ECMAScript 2018(ES2018):異步編程與正則表達式的深度進化

1.版本背景與發布 發布時間&#xff1a;2018年6月&#xff0c;由ECMA International正式發布&#xff0c;標準編號為ECMA-262 9th Edition。歷史意義&#xff1a;作為ES6之后的第三次年度更新&#xff0c;ES2018聚焦于異步編程、正則表達式和對象操作的標準化&#xff0c;推動…

【C語言】鏈接與編譯(編譯環境 )

前言&#xff1a; 在前面講解文件操作&#xff0c;了解了文件的類別&#xff0c;文件的打開與關閉&#xff0c;字符讀寫函數&#xff0c; 字符串讀寫函數&#xff0c;格式化輸入輸出函數 在C語言編程中&#xff0c;編譯與鏈接是將源代碼轉化為可執行程序的關鍵步驟。為了詳細…