【51微控制器學習筆記】基於STC89C52製作的交通訊號燈
/******************************************
USER HEARD 2017/6/4
*******************************************/
#ifndef _USERCONFIG_H_
#define _USERCONFIG_H_
/* 定義資料型別 */
#define uchar unsigned char
#define uint unsigned int
#define NOP() _nop_()
#include <reg52.h>
#include <intrins.h>
#include "interrupt.h"
#include "delay.h"
#include "74HC595.h"
#include "SEG.h"
#include "LED.h"
/* 巨集定義引腳 */
#define SEG P0
#define LEDs P2
/* 74HC595驅動 */
sbit S_CLK = P1^0;
sbit R_CLK = P1^1;
sbit MOSIO = P1^2;
/* 數碼管位選 */
sbit SEG1 = P0^0;
sbit SEG2 = P0^1;
/* 交通燈 */
sbit XR = P2^0;
sbit XY = P2^1;
sbit XG = P2^2;
sbit YR = P2^3;
sbit YY = P2^4;
sbit YG = P2^5;
/* 選擇開關 */
sbit SW = P3^2;
#endif
其他標頭檔案大同小異就不貼了。 3.it.c
/******************************************
中斷服務程式
by LZK 2017/6/17
******************************************/
#include "USER_Config.h"
uint Num_Min = 0;//分鐘計數器
uchar Num_Sec = 0;//秒鐘計數器
uchar Number = 60;//計數器
uchar Mark = 0;//標記
void Timer_Init()
{
TMOD = 0x11;//定時器0定時器1為工作方式1
/* 裝載初值 */
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
EA = 1;//開總中斷
/* 開啟定時器中斷 */
ET0 = 1;//定時器0
ET1 = 1;//定時器1
/* 啟動定時器 */
TR0 = 1;//定時器0
TR1 = 1;//定時器1
/* 外部中斷 */
EX0 = 1;
IT0 = 0;
}
void Int0_Select() interrupt 0
{
Num_Min = 0;
Num_Sec = 0;
Number = 60;
Mark = 0;
Calculate(Number);
LED_Relax();
}
void T0_Time() interrupt 1
{
/* 重灌初值 */
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
Num_Sec++;
if(Num_Sec==20)
{
Num_Sec = 0;
Number--;
Calculate(Number);
}
}
void T1_Time() interrupt 3
{
/* 重灌初值 */
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
Num_Min++;
if(Num_Min==60*20)
{
Num_Min = 0;
Number = 60;
Mark = ~Mark;
}
}
4.delay.c
/*************************************
延時函式庫 By LZK
頻率:12MHz
*************************************/
#include "USER_Config.h"
/* 延時x*9us */
void delay_8us(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<1;j++);
}
/* 延時xms */
void delay_ms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
/* 延時顯示 */
void delay(uint x)
{
while(x--) Display();
}
/*************************************
595傳送資料 By LZK
頻率:12MHz
2017/6/5
*************************************/
#include "USER_Config.h"
void HC595SendData(uchar SendVal)
{
unsigned char i;
for(i=0;i<8;i++)
{
MOSIO=SendVal>>7;
SendVal<<=1;
S_CLK=0;
NOP();
NOP();
S_CLK=1;
}
R_CLK=0;
NOP();
NOP();
R_CLK=1;
}
6.LED.c
/**********************************
LEDs Control
控制交通燈
by LZK 2017/6/17
**********************************/
#include "USER_Config.h"
extern uchar Number;
extern uchar Mark;
void LED_Init()
{
LEDs = 0xff;
//SW = 0;
}
void Select()
{
uchar sw = SW;
switch(sw)
{
case 0:
LED_Relax();
break;
case 1:
LED_Control();
break;
}
}
void LED_Relax()
{
uint x = 10000;
SEG = 0xff;
LEDs = 0xff;
while(x--)
HC595SendData(~0x00);
x = 10000;
SEG = 0x00;
LEDs = 0x00;
while(x--)
HC595SendData(~0x00);
}
void LED_Control()
{
/* 黃燈判斷 */
if(Number <= 3)
{
XY=~XY;
YY=~YY;
delay(100);
}
else
{
XY = 1;
YY = 1;
}
/* 路口選擇 */
XR = Mark;
XG = ~Mark;
YR = ~Mark;
YG = Mark;
/* 顯示 */
Display();
}
7.SEG.c
/*************************************
數碼管顯數 By LZK
頻率:12MHz
2017/6/5
*************************************/
#include "USER_Config.h"
uchar code NUM[]={0x3f,0x30,0x6d,0x79,0x72,0x5b,0x5f,0x31,0x7f,0x7b,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar value[2];
void Calculate(uint num)
{
value[0] = num%10;
value[1] = num/10;
}
void Display()
{
//傳送十位數
HC595SendData(NUM[value[1]]);
SEG = 0x01;
delay_8us(25);
//消隱
HC595SendData(0x00);
delay_8us(25);
//傳送個位數
HC595SendData(NUM[value[0]]);
SEG = 0x02;
delay_8us(25);
//消隱
HC595SendData(0x00);
delay_8us(25);
}
8.main.c
/*************************************************
交通訊號燈 by LZK
Date:2017/6/4
通過定時器0讀秒,通過定時器1換方向
通過Calculate傳送數字
**************************************************/
#include <reg52.h>
#include "USER_Config.h"
extern uchar Number;
void main()
{
Timer_Init();
LED_Init();
while(1)
{
LED_Control();
}
}
四、成果展示 五、總結 第一次發部落格,如有不妥的地方請大家多指教 網盤分享:
相關推薦
【51微控制器學習筆記】基於STC89C52製作的交通訊號燈
一、簡介 近來學(玩)了下已經好久沒碰的51,心血來潮自己DIY了一個交通訊號燈模型。沒有什麼創新之處,就是復(dao)習(gu)復(dao)習(gu)了下51的定時器中斷、外部中斷以及最小系統電路,熟悉了下74HC595的用法和數碼管。因為好久沒碰51了導致數
51微控制器學習筆記【0】——基礎知識
一.微控制器三大資源 1.Flash—-程式儲存空間 相當於計算機的硬碟,可實現斷電後資料不丟失。 2.RAM—-資料儲存空間 相當於計算機的記憶體,用來儲存程式執行過程中產生和需
【ALB學習筆記】基於事件觸發方式的串行通信接口數據接收案例
except 和數 從數據 發送數據 exceptio 工作原理 實時 double 窗體 基於事件觸發方式的串行通信接口數據接收案例 廣東職業技術學院 歐浩源 1、案例背景 之前寫過一篇《基於多線程方式的串行通信接口數據接收案例》的博文,討論了采用輪詢方
【ALB學習筆記】基於.NET環境的高頻RFID卡讀寫設備的基本操作案例
範例 write load rgs 顯示 職業 ner num cte 基於.NET環境的高頻RFID卡讀寫設備的基本操作案例 廣東職業技術學院 歐浩源 1、引言 RFID高頻卡在我們的日常生活中隨處可見,是物聯網應用中不可或缺的一個重要部分,也是全國職業
【機器學習筆記】基於k-近鄰演算法的數字識別
更多詳細內容參考《機器學習實戰》 k-近鄰演算法簡介 簡單的說,k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類。它的工作原理是:存在一個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每個資料與所屬分類的對應關係。輸入沒
【DSP學習筆記】基於CCS5.5的FIR濾波器設計
一、概述 本文是基於TMS320C5510晶片設計的FIR濾波器。介紹利用matlab和CCS5.5設計FIR濾波器的過程和模擬結果。輸入訊號包含100Hz和200Hz兩個成分,通過matlab生成一個FIR低通濾波器的各階係數,利用CCS完成訊號處理並且展示模
【Spark深入學習 -10】基於spark構建企業級流處理系統
變現 大內存 空間換時間 detail python 訪問量 新版本 kafak 計算框架 ----本節內容------- 1.流式處理系統背景 1.1 技術背景 1.2 Spark技術很火 2.流式處理技術介紹 2.1流式處理技術概念 2.
【SQL Server學習筆記】事務、鎖定、阻塞、死鎖
body sqlserve distrib reset reads cli ast function pre http://blog.csdn.net/sqlserverdiscovery/article/details/7712068 Column nameData
【安全牛學習筆記】XSS的簡述
cookie 服務器 漏洞 安全 xss 1.Cross Site SCripting 攻擊者往Web頁面裏插入惡意Script代碼,當用戶瀏覽該頁時,嵌入其中Web裏面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
【安全牛學習筆記】XSS的利用
xss 惡意代碼 漏洞 反射型XSS1.概念 通過社會工程學等手段誘騙用戶點擊某個精心構造的鏈接,該鏈接會將惡意的js代碼提交給 有漏洞的服務器網站,並由服務器返回給受害者的客戶端執行。 2.POC -<scri
【安全牛學習筆記】Web掃描器(1)
安全 web 漏洞 1.偵察httrack可將目標網站的網頁全部爬取下來,減少偵察過程中與目標服務器發生的交互。 2.Nikto(1).檢測對象 掃描軟件版本 搜索存在安全隱患的文件 配置漏洞
【安全牛學習筆記】OSI網絡模型
http ssh stmp 安全 OSI網絡模型 物理層規定比特在物理介質中的傳輸方式,解決物理傳輸過程中的問題。 代表設備:中繼器,集線器(多端口中繼器) 數據鏈路層 在不可靠的網絡環境中進行可靠的數據傳輸。解決數據傳輸中可能出現的
【安全牛學習筆記】搜索引擎
安全、web、滲透、信息安全 搜索引擎 shodan爬取banner信息。搜索聯網設備。 常用關鍵字: netcity country CNport oshostname實例:cisco 200 ok 思科設備default password 默認密碼
【安全牛學習筆記】服務掃描
安全、web、滲透、信息安全 1.簡述 識別開放端口上的應用 識別目標操作系統 提高攻擊效率 2.分類 Banner信息獲取 服務識別 操作系統識別snmp分析 防火墻識別 3.Banner (1).含義
【知了堂學習筆記】Eclipse,Myeclipse連接MySQL數據庫和Oracle數據庫
let ets 最好 lec 代碼 htm ner pro 密碼 一.連接MySQL數據庫 1.由於Eclipse,Myeclipse都沒有連接MySQL數據的架包,我們需要自行下載MySQL連接架包 mysql-connector(官方鏈接:http://dev.my
【安全牛學習筆記】Kali Linux 安裝-持久加密USB安裝、熟悉環境、熟悉BASH命令
security+ linux 信息安全 持久加密USB安裝-1LUKS: linux UNified Key Setup 磁盤分區加密規範 不依賴於操作系統的磁盤級加密 Windows——DoxBox 後端:dm-crypt 前端:cryptsetup 微軟的bitlocker將鏡像
【安全牛學習筆記】網絡配置、更新升級、安裝軟件包、瀏覽器插件
信息安全;網絡配置[email protected]:~# dhclient eth0 //用來通過 dhcp 協議配置本機的網絡接口[email protected]:~# ifconfig 查看現在的ip地址[email protected]:~# ifc
【安全牛學習筆記】 Kali Linux安裝-熟悉環境
信息安全;security+;kali linux熟悉BASH命令 Ls、cd、pwd、cat、more、tail、cp、rm、top、ps、greg、ifconfig、netstat、awk、sort、route、mount、dmesg、find、whereis、Echo、vi 管道 shell腳本[
【安全牛學習筆記】基本工具-NETCAT(telnet/banner、傳輸文本信息)
信息安全;security+;kali linux滲透測試常用工具經常使用且功能強大安全從業者必不可少的幫手Nc / ncatWireshackTcpdumpNETCAT-----NC網絡工具中的瑞士軍刀——小身材、大智慧偵聽模式/傳輸模式telnet/獲取banner信息傳輸文本信息傳輸文件目錄加密傳輸文件
【安全牛學習筆記】實驗環境
信息安全;security+;kali linux滲透測試準備實驗環境 滲透非授權系統的弊端 搭建自己的實驗環境安裝虛擬機微軟最新版軟件 http://msdn .microsoft.com/en-ca/subscriptions/aa336858windows虛擬機 http://dev.mod