樓層數可選,硬件可刪除。16層內任意設置最大樓層數,用不到的樓層硬件可以刪除,不影響程序。提供串口通訊,波特率可在main初使化里設置。更新了詳細注釋版本,需要學習的朋友請關注銀穗之家回復:16層電梯源碼。即可下獲取詳細注釋版。
電梯仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
/*Uart串口發送函數示例:
1.USART_SendByte(u8 dat) //發送單字節數據
例:USART_SendByte(0x04);
2.USART_Send(u8* arr,u16 len) //發送多字節數據
例:
Usart.TX_BUFF[0]=0xA1;
Usart.TX_BUFF[1]=0x08;
Usart.TX_BUFF[2]=0x04;
Usart.TX_BUFF[3]=0xF9;
USART_SendByte(Usart.TX_BUFF,4);
或
u8 Arr[16]={0xA1,0x08,0x04,0xF9};
USART_SendByte(Arr,4);
3.USART_SendStr(u8* str) //發送字符串數據
USART_SendStr("大吉在利,晚上吃雞!rn");
4.有關電梯通信代碼參考:
<1>發送電梯當前樓層給其他設備: USART_SendByte(ElevState.CurrentFloor);
<2>發送電梯當前運行方向給其他設備: USART_SendByte(ElevState.Direction);
<3>發送電梯當前所有數據給其他設備: USART_Send((u8*)(&ElevState),sizeof(ElevState));
*/
單片機源程序如下:
/*************************電梯主程序*****************************/
#include "reg51.h"
#include "intrins.h"
/*********************程序選擇****************************/
#define USE_MODE 0 //0-定時模擬 1-傳感器
/****************************************************************/
/*********************平臺移植部分代碼****************************/
//定時器模擬版接口:
#if (USE_MODE==0)
sbit DOOR=P3^5; //電梯門開關控制信號
sbit ElevMotor_P=P3^6; //電梯電機正極控制信號
sbit ElevMotor_N=P3^7; //電梯電機負極控制信號
sbit SHCP=P0^5; //74HC595 LED、數碼管顯示驅動
sbit DS=P0^6; //74HC595 LED、數碼管顯示驅動
sbit STCP=P0^7; //74HC595 LED、數碼管顯示驅動
#define KeyPort_X P1 //矩陣按鍵接口
#define KeyPort_Y P2 //矩陣按鍵接口
#endif
//除以上定義的IO外,還需用到P33作為矩陣鍵盤的中斷觸發引腳
//8路與門可用芯片:CD4068或74LS30(芯片是與非門)+出端接一個三極管反向電平。
//傳感器版接口:
#if (USE_MODE==1)
sbit DOOR_CLOSE_SENSOR=P3^4;//電梯門關閉檢測傳感器輸入
sbit DOOR=P3^5; //電梯門開關控制信號
sbit ElevMotor_P=P3^6; //電梯電機正極控制信號
sbit ElevMotor_N=P3^7; //電梯電機負極控制信號
sbit SHCP=P0^5; //74HC595 LED、數碼管顯示驅動
sbit DS=P0^6; //74HC595 LED、數碼管顯示驅動
sbit STCP=P0^7; //74HC595 LED、數碼管顯示驅動
#define KeyPort_X P1 //矩陣按鍵接口
#define KeyPort_Y P2 //矩陣按鍵接口
#endif
//除以上定義的IO外,還需用到P33作為矩陣鍵盤的中斷觸發引腳
//需用到P32作為樓層限位開關觸發中斷引腳
//每個樓層一個限位開關,接在N路輸入的與門芯片上
//如果大于8層,可用兩個8路輸入的與門芯片+一個2路的與門芯片組合
//8路與門:用8路與非門CD4068或74LS30+輸出端接一個三極管反向電平。
/****************************************************************/
/***********************樓梯參數設置*****************************/
#define MaxFloor 16 //電梯總樓層(最大16)
#define FloorStayTime 40 //單位:50ms, 樓層停留時間:40*50ms=2S
#define DoorStayTime 2 //單位:S , 電梯門停留時間
#define SEG_Num 2 //數碼管數量(為1時請刪除第一個數碼管的595)
/****************************************************************/
#define u8 unsigned char
#define u16 unsigned int
#define TRUE 1
#define FALSE 0
#define Null 0
#define STOP 1
#define UP 2
#define DOWN 3
#define UP_IN 0x01
#define UP_OUT 0x02
#define DOWN_IN 0x04
#define DOWN_OUT 0x08
#define Elev_UP ElevMotor_P=0;ElevMotor_N=1 //低電平有效
#define Elev_DOWN ElevMotor_P=1;ElevMotor_N=0 //低電平有效
#define Elev_STOP ElevMotor_P=1;ElevMotor_N=1 //低電平有效
#define OPEN 1
#define CLOSE 0
#define DOOR_Open DOOR=OPEN
#define DOOR_Close DOOR=CLOSE
#define SHCP_H SHCP=1
#define SHCP_L SHCP=0
#define DS_H DS=1
#define DS_L DS=0
#define STCP_H STCP=1
#define STCP_L STCP=0
#if MaxFloor>8
#define MHC595_NUM 8
#else
#define MHC595_NUM 5
#endif
#define SEGPort 0x01
#define LED_IN_Port 0x02
#define LED_OUT_UP_Port 0x03
#define LED_OUT_DOWN_Port 0x04
typedef struct
{
u8 ElevRunning; //電梯運行狀態標志
u8 CurrentFloor; //當前電梯所處樓層
u8 Direction; //電梯運行方向
u8 FloorCallTable[MaxFloor+1];//數組[0]不用,從[1]開始使用 ,呼叫列表(所有樓層呼叫的信息均保存于此)
u8 FloorTimerCount; //計時
u8 ArriveFlag; //到達樓層信號(用于停止或在前一樓層提前加減速)(定時器模擬的用不到)
u8 FreeFlag; //電梯空閑狀態標志
}TYPEDEF_ELEVSTATE;
TYPEDEF_ELEVSTATE ElevState; //電梯狀態結構體
//u8 code SEG_NUM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //共陰SEG數碼管段碼 0~9
u8 code SEG_NUM[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共陽SEG數碼管段碼 0~F
u16 code LED_NUM[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //SEG數碼管段碼 0~9
u8 HC595_BUFF[MHC595_NUM]={0};
u8 Timer_Second;
u16 TimerCount;
u8 RIOver_Flag=0;
u8 ExternKey[2]={0}; //外部按鍵按下信息
u8 FloorCallTableBUFF[MaxFloor+10]={0};
u8 KeyPressFlag=0;
#define USART_RX_LEN 20 //接收緩存長度(請勿超過芯片rom剩余大小)
typedef struct
{
u8 RX_BUFF[USART_RX_LEN]; //接收緩存
u8 TX_BUFF[USART_RX_LEN]; //發送緩存
u16 RX_COUNT;
}USART;
USART Usart;
void delay_ms(u16 xms);
void delay_s(u8 xs);
void EXTI0_Init(void);
void Timer0_Init(void);
void USART_Configure(u16 BaudRate);
void HC595_Send(u8 *p);
u8 KeyScan(void);
void KeyDatHandle(u8 key);
void WaitDoorOpen(u8 ts);
void WaitDoorClose(u8 ts);
void SEG_Display(u8 segnum);
void LED_ON(u8 addr,u8 lednum);
void LED_OFF(u8 addr,u8 lednum);
void DlevWorkState(u8 state);
void Elevator(void);
u8 FloorCall_UP(u8 floorside);
u8 FloorCall_DOWN(u8 floorside);
u8 DelNullCheck(void);
void FloorCallCheck(void);
void USART_SendByte(u8 dat);
void USART_Send(u8* arr,u16 len);
void USART_SendStr(u8* str);
void SYSYEM_INIT(void);
void delay_ms(u16 xms)
{
u8 i;
u16 t;
for(t=xms;t>0;t--)
for(i=112;i>0;i--);
}
void delay_s(u8 xs)
{
TimerCount=0;
Timer_Second=0;
while(Timer_Second void EXTI0_Init(void) { EA = 1; IT0= 1; //下降沿觸發 EX0= 1; } void EXTI1_Init(void) { EA = 1; IT1= 1; //下降沿觸發 EX1= 1; } …………………… …………限于本文篇幅 余下代碼請從51黑下載附件………… else if(((key>0)&&(key<=8))||((key>32)&&(key<=40))) //樓梯內的樓層選擇按鍵(使用第1行和第5行作為電梯內部16個按鍵,每行8個鍵) { if(key>32) tempkey=key-32+8; else tempkey=key; if(tempkey<=MaxFloor) { LED_ON(LED_IN_Port,tempkey); if(((tempkey>ElevState.CurrentFloor)&&(tempkey if((tempkey } else if(((key>9)&&(key<=16))||((key>40)&&(key<=48))) //每個樓層門口外的向下按鍵(底樓按向下無效),第2行和第6行 { if(key>40) tempkey=key-40+8; else tempkey=key-8; if((tempkey>1)&&(tempkey<=MaxFloor)) { LED_ON(LED_OUT_DOWN_Port,tempkey); ElevState.FloorCallTable[tempkey]|=DOWN_OUT; } } else if(((key>16)&&(key<=24))||((key>48)&&(key<56))) //每個樓層門口外的向上按鍵(頂樓按向上無效),第2行和第7行 { if(key>48) tempkey=key-48+8; else tempkey=key-16; if(tempkey LED_ON(LED_OUT_UP_Port,tempkey); ElevState.FloorCallTable[tempkey]|=UP_OUT; } } else if(key==25) //開門 { if(ElevState.ElevRunning==FALSE) { if(DOOR==CLOSE) DOOR_Open; } }
上一篇:51單片機+74HC138驅動16*96點陣顯示漢字的Proteus仿真+源代碼
下一篇:簡單的單片機按鍵控制流水燈
推薦閱讀
史海拾趣
屹晶微的創始人黃米龍,原本在發電廠從事電氣運營工作長達八年。這段經歷讓他對電子領域有了深入的了解和濃厚的興趣。然而,他并沒有滿足于現狀,而是看到了中國芯片產業的巨大潛力和發展空間。于是,在2007年,他毅然決定從發電廠辭職,利用自己的積蓄和借來的資金,在臺州創立了屹晶微電子有限公司。
在創立初期,屹晶微面臨著資金短缺、技術落后和市場競爭激烈的困境。但黃米龍憑借對電子行業的深刻理解和堅定的信念,帶領團隊克服了種種困難。他們不斷引進先進技術和設備,加強研發力量,提升產品質量。經過幾年的努力,屹晶微逐漸在芯片設計領域嶄露頭角,并成功推出了多款具有自主知識產權的芯片產品。
為了更好地服務全球客戶,Horn公司積極實施全球化戰略。通過在海外設立分公司和與分銷商建立緊密合作關系,Horn公司的產品和服務能夠迅速覆蓋到全球各地。這種全球化布局不僅提升了公司的市場影響力,還促進了技術交流與合作,為公司帶來了更多的發展機遇。
隨著技術的成熟和產品的完善,Cornerstone Sensors開始積極拓展市場。公司參加了多個國際電子展會和技術研討會,與全球各地的潛在客戶和合作伙伴建立了聯系。憑借卓越的產品性能和專業的技術支持,Cornerstone Sensors贏得了眾多客戶的信任,并成功打入了國際市場。同時,公司還積極尋求與上下游企業的合作,共同推動傳感器技術的發展和應用。
隨著產品技術的成熟,長園維安開始積極拓展國際市場。公司與國際知名企業建立合作關系,共同開發新產品,拓展市場份額。同時,長園維安還積極參加國際展覽,展示公司最新技術和產品,提高品牌知名度。這些努力使長園維安在全球電子行業中的影響力不斷增強。
為了降低生產成本、提高生產效率,Connector City公司開始實施產業鏈整合戰略。公司與上游原材料供應商和下游客戶建立了緊密的合作關系,實現了供應鏈的優化和協同發展。通過整合產業鏈資源,公司不僅降低了采購成本和市場風險,還提高了產品質量和交貨速度,進一步增強了市場競爭力。
進入21世紀,Cincon對質量與環保的重視日益凸顯。2001年和2002年,公司的臺灣工廠分別獲得了ISO 9001和ISO 14001認證,這標志著公司在質量管理和環境保護方面達到了國際標準。隨后,Cincon中國工廠也于2009年獲得了ISO 14001認證,進一步證明了公司對環保責任的承諾。
我在SST39VF3201上用以下函數進行擦除: bool SST39VF320X::Erase_One_Block (U32 Dst) { bool ReturnStatus=TRUE; IntOff(); *(U16 *) (BaseAddres + 0x5555 * AddrsShi ...… 查看全部問答∨ |
Tyep mismatch in redeclaration of \'OSTakCreate\'!!! 和他相關聯的文件函數我找了,但都沒找到原因。請問有誰以前遇到過這類問題,期待著您的回復!… 查看全部問答∨ |
M590 尺寸:28mm*24mm*11mm 全球第一款單芯片GPRS模塊 功耗低:待機功耗2.5MA 溫寬大:-40—80 支持串口的CMUX功能 開放1Kbytes數據區供客戶使用 獨特AES軟件加密功能 PMB7880集成了基帶、射頻(收發)以及電源管理四顆芯片 編碼方式:CS-2 ...… 查看全部問答∨ |
我的串口工具上面無法顯示自己改的U-BOOT的選項菜單,什么都沒有,做i2c和LCD實驗的時候也是串口工具上面什么都沒有!但是uart實驗又是成功的,也就是說串口的設置是對的!。。。問題到底在什么地方阿~麻煩各位了! 我用的是mini2440的板子,USB ...… 查看全部問答∨ |
請問在EVC下的precompiled header file是什么?不是“ #include "stdafx.h"”嗎? 請問在EVC下的precompiled header file是什么?不是“ #include "stdafx.h" ”嗎? 我編譯程序 報錯: C:\\abcd\\my_draw_v1\\TopologyLine.c(6) : fatal error C1853: \'emulatorDbg/my_draw_v1.pch\' is not a precompiled header file c ...… 查看全部問答∨ |
#include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit duan=P2^6; //申明U1鎖存器的鎖存端 sbit wei=P2^7; //申U2鎖存器 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析