娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

單片機16層可剪裁電梯源碼+Proteus仿真設計

發布者:誰與爭鋒1最新更新時間:2019-10-15 來源: eefocus關鍵字:單片機  16層可剪裁電梯  Proteus仿真 手機看文章 掃描二維碼
隨時隨地手機看文章

樓層數可選,硬件可刪除。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                        else

                        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;

                }

        }

[1] [2] [3] [4]
關鍵字:單片機  16層可剪裁電梯  Proteus仿真 引用地址:單片機16層可剪裁電梯源碼+Proteus仿真設計

上一篇:51單片機+74HC138驅動16*96點陣顯示漢字的Proteus仿真+源代碼
下一篇:簡單的單片機按鍵控制流水燈

推薦閱讀最新更新時間:2025-04-23 15:44

PROTEUS仿真單片機與小鍵盤接口通信
(protues高版本不兼容低版本真是不方便啊) 設計要求: 實現Proteus ISIS中的鍵盤矩陣與8051微控制器的接口。在上一個項目中,實現了LCD與8051微控制器的接口,可以在上面顯示數據和不同的值,接下來的項目將從鍵盤上獲取按鍵值,并在LCD上顯示這些值。 #include reg51.h void cct_init(void); void delay(int); void lcdinit(void); void writecmd(int); void writedata(char); void Return(void); char READ_SWITCHES(void); char get_key(void)
[單片機]
用<font color='red'>PROTEUS仿真</font><font color='red'>單片機</font>與小鍵盤接口通信
基于at89c51單片機的最基礎流水燈Proteus仿真圖含代碼
#include reg51.h #include stdio.h void delay(void) { unsigned int i,j; for(i=500;i 0;i--) for(j=115;j 0;j--); } void main(void) { // Write your code here unsigned char led ,a ,b ;//定義三個變量 led=0xfe; //led=1111 1110,P0。0亮 while (1) { P0=led; //將led的狀態賦給P0寄存器 a=led 7; //將led最高位賦給a最低位,其
[單片機]
基于at89c51<font color='red'>單片機</font>的最基礎流水燈<font color='red'>Proteus仿真</font>圖含代碼
單片機舵機控制程序教程及proteus仿真原理圖
單片機控制舵機的proteus仿真原理圖: 單片機舵機控制程序教程,在壓縮包中可下載全部內容: 單片機源程序: /******************************************************************** 51黑電子論壇 *********************************************************************/ #include reg52.h //頭文件 #define uchar unsigned char //宏定義無符號字符型 #define uint unsigned int //
[單片機]
<font color='red'>單片機</font>舵機控制程序教程及<font color='red'>proteus仿真</font>原理圖
Proteus仿真實驗之STM32流水燈
1.創建工程 1.點擊創建新工程,輸入工程名、安裝路徑。 2.選擇從選中的模板中創建原理圖(DEFAULT) 3.選擇不創建PCB布版設計 4.選擇創建固件項目,其中:系列選擇Cortex-M3,Controller選擇STM32F103R6,點擊下一步,然后創建成功 2.配置實驗所需元件 1.創建項目完成后就如下圖所示,顯示出自己所選的型號,STM32F103R6,系統并以配置好電源,連接電路如下,我們選用C0-C7端口,總共8個,如下圖所示: 3.進入keil 5中生成hex文件 2.程序代碼如下(程序實現要求:8個led燈依次閃爍,然后8個燈同時閃爍8次,依次重復) /*main.c*/ #
[單片機]
<font color='red'>Proteus仿真</font>實驗之STM32流水燈
1~99秒倒計時數碼管顯示C程序+Proteus仿真
1~99秒倒計時數碼管顯示C程序+Proteus仿真文件。 優化了程序,使用51單片機內部定時器,可以實現1-99秒內倒計時。 仿真效果為: 源程序為: /* 調試環境:Proteus 7.8 AT89S52單片機 8位共陰數碼管 功能為:實現數碼管1秒~99秒倒計時, 12M晶振 */ #include reg52.h #define uchar unsigned char sbit LED1=P1^1; //連的是LED1 #define MAX_NUM 13 //最大倒計時數1~99可設 #define SEGPORT P0 //定義數碼管連接端口 sbi
[單片機]
1~99秒倒計時數碼管顯示C程序+<font color='red'>Proteus仿真</font>
ST汽車MCU:FD-SOI+PCM相變存儲!
就像一個遍體鱗傷的職業拳擊手,PCM不會屈服或放棄戰斗。盡管PCM因美光3D XPoint和英特爾Optane的不幸遭遇而鼻青臉腫,但由于意法半導體(STMicroelectronics,簡稱ST)和三星的合作,它已經在微控制器領域找到了自己的出路。早在2018年,意法半導體就宣布,它正在為汽車市場提供采用28nm FD-SOI工藝制造的嵌入式PCM (ePCM)微控制器。現在,意法半導體宣布了下一代帶有ePCM的汽車微控制器,由三星采用聯合開發的18nm FD-SOI工藝結合意法半導體的ePCM技術制造。 ST專門針對汽車行業的ePCM微控制器,因為汽車行業比大多數其他微控制器應用具有更嚴格的環境溫度要求。高溫是PCM的致命
[汽車電子]
ST汽車<font color='red'>MCU</font>:FD-SOI+PCM相變存儲!
恩智浦MCX微控制器增強移動機器人電機控制能力
移動機器人的卓越性能、平穩運動和可靠運行離不開高效精確的電機控制。機器人的自主性和復雜性不斷提高,非常需要能夠處理復雜電機控制和其他任務的高級微控制器。恩智浦新一代MCX微控制器產品組合具有先進的外設,可幫助開發人員優化移動機器人系統中的電機控制。 MCX A和N系列具有通用、高配置的增強型Flex脈寬調制器 (eFlexPWM) 模塊,可實現精確的電機控制,并提供廣泛的功能集,滿足移動機器人應用的各種需求。除了驅動電機的高級控制外,eFlexPWM模塊還可用于構建開關式電源。 eFlexPWM模塊的一個主要功能是支持中心對齊、邊沿對齊和非對稱脈寬調制 (PWM)。 中心對齊PWM可保持相位對齊,并將無刷直流 (BLDC)
[嵌入式]
恩智浦MCX<font color='red'>微控制器</font>增強移動機器人電機控制能力
英飛凌與馬瑞利合作 利用AURIX? TC4x MCU系列推動區域控制單元創新
11月8日,英飛凌科技股份公司(Infineon Technologies AG)與汽車行業移動出行技術供應商馬瑞利(Marelli)合作開發先進的E/E架構解決方案。此次合作結合了兩家公司的汽車專業知識,利用英飛凌最新的AURIX? TC4x微控制器開發創新的區域控制單元(ZCU)。英飛凌的AURIX TC4x系列專為新型E/E架構而設計,擴展了汽車微控制器單元(MCU)的功能,以實現安全可靠的處理。該MCU系列支持多Gbit以太網和PCI Express等高速通信接口,以及CAN-XL和10BASE-T1S等新接口。這為汽車制造商應用下一代E/E架構提供了出色的性能、數據吞吐量和靈活性。 圖片來源:英飛凌 馬瑞利電子
[汽車電子]
英飛凌與馬瑞利合作 利用AURIX? TC4x <font color='red'>MCU</font>系列推動區域控制單元創新
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 平和县| 北安市| 永善县| 澄江县| 霞浦县| 同心县| 肇庆市| 恭城| 来安县| 石楼县| 唐河县| 桃园县| 闽侯县| 阳朔县| 措勤县| 隆尧县| 松阳县| 灵宝市| 荣昌县| 绿春县| 融水| 察哈| 扎兰屯市| 莱西市| 奉节县| 花垣县| 綦江县| 常德市| 华容县| 横峰县| 蓬莱市| 张家港市| 海安县| 铜陵市| 定远县| 崇礼县| 文安县| 台中市| 巩留县| 华坪县| 枣阳市|