藍橋杯大賽微控制器組國信長天開發板個人總結 | 建立工程

小小工程員發表於2021-01-04

keil4新增STC微控制器標頭檔案

通過STC下載軟體,將STC官方標頭檔案新增到keil的安裝路徑中。
在這裡插入圖片描述

專案建立

1.程式檔案分類

由於我一般會將工程分塊製作,所以建立了三個資料夾:驅動資料夾、輸出可執行檔案的資料夾、主程式資料夾。如圖所示:
在這裡插入圖片描述

2.keil建立工程

開啟keil軟體,選擇建立一個新工程:
在這裡插入圖片描述
將工程路徑設定到自己建立的主程式資料夾中,工程名隨意,選擇微控制器型號時選擇15F2K60S2型號,之後一路OK即可。
在這裡插入圖片描述
建立工程後將工程欄進行分類,製作三個目錄。
在這裡插入圖片描述
設定工程編譯後可以輸出可執行檔案hex。
在這裡插入圖片描述
新增標頭檔案路徑,將三個資料夾路徑都包含進來。之後點OK即可。
在這裡插入圖片描述
在左側可新增個人的工程檔案,將驅動程式碼放入驅動檔案目錄,主程式放到主程式目錄。這樣就完成了工程建立。

驅動檔案的製作

比如最基本的延時函式,我想設定為一個.h和一個.c組成,這樣方便之後的呼叫。

1. delay.h檔案

#ifndef __DELAY_H__
#define __DELAY_H__

#include"main.h"   //個人建立的總的標頭檔案彙總的地方



extern void  Delay_ms(unsigned int ms);

#endif


2. delay.c檔案

/*************************************************************************
程式功能: --延時函式
	
程式設計人資訊:
姓名:	Pandas
Email:	itworkstation@hotmail.com
專業:	電子資訊工程專業
**************************************************************************/
#include  "delay.h" 


void  Delay_ms(unsigned int ms)
{
     unsigned int i;
	 do{
	      i = MAIN_Fosc / 14000;   //MAIN_Fosc :晶振頻率
		  while(--i);   //14T per loop
     }while(--ms);
}

3. main.h檔案則是包含了很多標頭檔案彙總

#ifndef __MAIN_H_
#define __MAIN_H_

#include"STC15F2K60S2.h"
#include<intrins.h>



#include"config.h"

#include"delay.h" 
#include"Enable_138.h"
#include"Led_7seg.h"
#include"ULN2003_Device.h"
#include"onewire.h"
#include"LED_SET.h"
#include"DS1302.h"

#include"iic.h"
#include"AT24c02.h"
#include"PCF8591.h"

//#include"Timer0.h"
#include"Timer1.h"
#include"Timer2.h"

#include"Hongwai.h"

#include"keyboard.h"
//#include"Key_Duli.h"
#include"Key_Duli_time.h"


#include"Ultrasonic.h"

#endif

4. config.h檔案則是包含了我個人很多的配置習慣

#ifndef		__CONFIG_H
#define		__CONFIG_H


#define MAIN_Fosc		12000000L	//定義主時鐘
//#define MAIN_Fosc		12000000L	//定義主時鐘
//#define MAIN_Fosc		11059200L	//定義主時鐘
//#define MAIN_Fosc		 5529600L	//定義主時鐘
//#define MAIN_Fosc		24000000L	//定義主時鐘
#define FOSC  MAIN_Fosc


typedef  unsigned char uchar ;
typedef  unsigned int  uint;

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

/*******************各種狀態控制巨集,適用於全域性需要控制的狀態*******************************/
#define State_OFF	0
#define State_ON 1
#define State_Toggle 2
/**************************************************/

/*******************細微定時器操作,防止影響傳輸協議 START*******************************/
#define TIMER_INT_OFF (IE2  &=  ~(1<<2) )
#define TIMER_INT_ON (IE2  |=  (1<<2))
/********************細微定時器操作,防止影響協議 END******************************/



/********************非必要驅動隔離線************* ********** ********** /  


/*******************ULN2003 START*******************************/
#define ULN2003_Beep 0
#define ULN2003_Relay 1
#define ULN2003_BeepAndRelay 2

#define GPIO_ULN2003_Control P0
/********************ULN2003 END******************************/
/*******************74HC138 START*******************************/
#define LED_8_Select 4
#define Led_7seg_DU 7
#define Led_7seg_WE 6
#define ULN2003_Enable 5    //     101

#define GPIO_74HC138 P2
/********************74HC138 END******************************/
/*******************數碼管 START*******************************/
#define Led_OFF_DU  16	 // 滅
#define	Led_dian_start_DU   17	 //LED段碼陣列中帶小數點的起始位
#define Led_rod_DU  27	 // -
#define Led_H_DU  28	 // H	   1000 1001
#define Led_DS18B20_DU  29	 //  ℃
#define Led_U_DU  31	 //  U

#define Led_7seg_Mode_Normal 0
#define Led_7seg_Mode_AddrToggle 1
#define Led_7seg_Mode_SelectToggle 2

#define Led_7seg_GPIO P0		   //數碼管的段 介面
/********************數碼管 END******************************/


/********************定時器0 START******************************/
#define Timer0_Run TR0=1
#define Timer0_Stop TR0=0

#define Timer0_Mode_Time 0
#define Timer0_Mode_Count 1
/********************定時器0 END******************************/
/********************定時器1 START******************************/
#define Timer1_SetTimeMS_Init(X) X	//設定定時器 MS
/********************定時器1 END******************************/
/********************定時器2 START******************************/
#define Timer2_On (IE2  |=  (1<<2); )	//開啟定時器2 
#define Timer2_Off (IE2  &=  ~(1<<2); )	//關閉定時器2 
/********************定時器2 END******************************/
/********************定時器3 START******************************/
#define Timer3_Run    (IE2 |= 0x20 )   //允許中斷 
#define Timer3_Stop   (IE2 &= ~0x20)    //關閉中斷 
/********************定時器3 END******************************/




/********************LED燈 START******************************/
#define LED_IO  P0
#define LED_Select_All 9
/********************LED燈  END******************************/
/********************DS1302時鐘 START******************************/
#define Write_Ds1302_DATA 0
#define Read_Ds1302_DATA 1  
#define DS1302_CHOOSE_HOUR 0  
#define DS1302_CHOOSE_YEAR 1 
/********************DS1302時鐘  END******************************/
/********************AT24C02 EEROM START******************************/
#define EEROM_Write 0
#define EEROM_Read 1
#define EEROM_TEST_ADDR 250
/********************AT24C02 EEROM   END******************************/
/********************PCF8591模數轉換 START******************************/
#define PCF8591_DAC 0
#define PCF8591_ADC 1

#define NO  0  //AIN0口 插口,直接輸入AD量,需外接
#define GM  1  //AIN1口		   //光敏
#define LM358  2  //AIN2口   經過LM358放大訊號後輸入AD量 ,需外接元器件  
#define PT_RES  3  //AIN3口 	  滑動變阻器口
/********************PCF8591模數轉換   END******************************/


#endif

相關文章