?? sample1.c
字號:
/****************************************************************/
/* 項目名稱 : R8C/23 CAN/LIN Demo Board */
/* : 樣例程序1 */
/* : 人機接口 */
/* 硬件環境 : R0K521237C000BB */
/* MCU型號 : R5F21237JFP */
/* C編譯器 : NC30WA,版本5.30.r02及以上 */
/* 文件名 : Sample1.c */
/* 版本 : 1.0 */
/* 作者 : 閆雋 */
/* 修訂歷史 : */
/* 修訂者 時間 版本 說明 */
/* 閆雋 2006/9/11 1.0 初版發行 */
/* */
/****************************************************************/
/* Copyright, 2006 RENESAS TECHNOLOGY CORPORATION & */
/* RENESAS SOLUTIONS CORPORATION */
/****************************************************************/
#include "..\inc\Comdef_r823.h"
#include "..\inc\Main.h"
#include "..\inc\Main_cons.h"
#include "..\inc\Key.h"
#include "..\inc\Disp.h"
#include "..\inc\Misc.h"
#include "..\inc\Isr.h"
void main( void );
/*------------------------------------------------------
名稱 : main
功能 : 初始化,監控程序
入口 : 無
出口 : 無
調用 : vKey_exe, vKey_read, vDisp_exe, vLcd_init,vMisc_beep_100ms
寄存器 : 全部
------------------------------------------------------*/
void main( void )
{
uchar8 ucI;
uint16 uiJ;
uchar8 ucMenu_ID;
/*--------------------------------------------------*/
/* 時鐘初始化 */
/*--------------------------------------------------*/
/* 切換主時鐘:外接時鐘 */
prc0 = HOFF; // 寄存器寫保護:禁用
cm02 = LEN; // WAIT模式下時鐘: 啟用
cm05 = LON; // Xin引腳輸入: 啟用
cm06 = LON; // cm16/17: 啟用
cm10 = LON; // 時鐘總開關: 開
cm13 = HON; // Xin-Xout引腳功能:外接晶體
cm14 = HON; // 片內低速時鐘:啟用
cm15 = HON; // Xin-Xout驅動能力:高
cm16 = 0; // 主時鐘分頻比:1
cm17 = 0;
ocd0 = HON; // 時鐘停止檢測功能:啟用
ocd1 = HON;
ocd2 = LON; // CPU時鐘源:XIN
fra01 = LOFF; // 片內時鐘源: 低速
fra00 = LOFF; // 片內高速時鐘:禁用
prc0 = LEN; // 寄存器寫保護:啟用
/* 等待時鐘穩定 */
ucI = 0;
while ( ucI < OSC_STABLE_TIME )
{
ucI++;
}
/*--------------------------------------------------*/
/* IO引腳初始化 */
/*--------------------------------------------------*/
prc2 = HON; // 端口方向寄存器寫保護:關
pd0 = 0xc0; // P0.0 ~ P0.5:輸出,P0.6 ~ P0.7:AD輸入
prc2 = LOFF; // 端口方向寄存器寫保護:開
pd1 = 0xd0; // P1.0 ~ P1.3:按鍵,輸入
// P1.4 :LIN TxD,輸出
// P1.5 :LIN RxD,輸入
// P1.6 ~ P1.7:輸出
pd2 = 0x80; // P2.7:輸出
pd3 = 0xbb; // P3.0 P3.1 P3.3:輸出
// P3.4 P3.5 P3.7:SSU,輸出
pd4 = 0x18; // P4.3:CAN收發器CS,輸出
// P4.4:輸出
// P4.5:INT0,輸入
pd6 = 0x7b; // P6.0:輸出
// P6.1:CAN TxD,輸出
// P6.2:CAN RxD,輸入
// P6.3:LIN收發器CS,輸出
// P6.4:LCD地址選擇,輸出
// P6.5:LCD復位,輸出
// P6.6:UART調試口,輸出
// P6.7:UART調試口,輸入
/*--------------------------------------------------*/
/* 設置SSU(液晶模塊接口) */
/*--------------------------------------------------*/
// SSU相關IO端口方向
pd3_3 = 0; // SSI: Input
pd3_4 = 1; // SCS: Output
pd3_5 = 1; // SSCK: Output
pd3_7 = 1; // SSO: Output
iicsel = 0; // SSU模塊:啟用
ice_iccr1 = 0;
re_sser = 0; // 設置前關閉收發
te_sser = 0;
ssums_ssmr2 = 1; // 握手信號:4-wire bus
cphs_ssmr = 0; // 采樣點:偶數沿
cpos_ssmr = 0; // SCLK空閑電平:高
mls_ssmr = 0; // 數據方向:高位在前
mss_sscrh = 1; // 端口類型:主機
scks_ssmr2 = 1; // SCLK引腳:時鐘輸出
sckos_ssmr2 = 0;
soos_ssmr2 = 0;
css0_ssmr2 = 0; // SCS引腳:輸出
css1_ssmr2 = 1;
csos_ssmr2 = 0; // CMOS類型
bide_ssmr2 = 0; // SSO和SSI組成串行環路
cks0_sscrh = 0; // 時鐘源:f1 / 4
cks1_sscrh = 1;
cks2_sscrh = 1;
while ( orer_sssr == 1 ) // 清除過載錯誤標志
{
orer_sssr = 0;
}
rsstp_sscrh = 1;
re_sser = 0; // 收發功能:單發
te_sser = 1;
if ( tend_sssr == 1 )
{
tend_sssr = 0;
}
ceie_sser = 0; // 中斷源:發送結束
rie_sser = 0;
teie_sser = 1;
tie_sser = 0;
ce_sssr = 0;
rdrf_sssr = 0;
ilvl0_ssuaic = 1; // 中斷: 允許, 優先級1
ilvl1_ssuaic = 0;
ilvl2_ssuaic = 0;
ir_ssuaic = 0;
/*--------------------------------------------------*/
/* 初始化非周期事件觸發標志 */
/*--------------------------------------------------*/
ucKey_temp = NO_KEY;
ucKey_ID = NO_KEY;
ucKey_delay_counter = 0;
/*--------------------------------------------------*/
/* 設置Timer RB,作為監控程序定時器 */
/* 10ms 中斷一次,自動重載 */
/*--------------------------------------------------*/
tstop_trbcr = HOFF; // 設置前, 確認定時器停止
while ( tcstf_trbcr == HON )
{
}
tmod0_trbmr = 0; // 模式: Timer mode
tmod1_trbmr = 0;
tck0_trbmr = 1; // 計數源: f8
tck1_trbmr = 0;
tckcut_trbmr = 0;
trbpre = 249; // 計數源分頻因子: 1/(TRBPRE+1)*(TRBPR+1)
trbpr = 99;
ilvl0_trbic = 1; // 中斷: 允許, 優先級1
ilvl1_trbic = 0;
ilvl2_trbic = 0;
ir_trbic = 0;
tstart_trbcr = HON; // 啟動計時器
while ( tcstf_trbcr == LOFF )
{
}
ucFlag_10ms_trigger = OFF; // 初始化定時觸發信號
/*--------------------------------------------------*/
/* MCU初始化完成,打開中斷總開關 */
/*--------------------------------------------------*/
asm(" FSET I "); // 允許所有中斷
/*--------------------------------------------------*/
/* 顯示初始化 */
/*--------------------------------------------------*/
vDisp_init();
ucMenu_ID = HOME;
ucCursor_M1 = 0;
ucCursor_M2 = 0;
vDisp_exe( ucMenu_ID, ucCursor_M1, ucCursor_M2 );
/* ============================================= */
/* 主程序 */
/* ============================================= */
while ( 1 )
{
/* --------------------------------------------- */
/* 鍵處理 */
/* --------------------------------------------- */
if ( ucKey_ID != NO_KEY )
{
vKey_exe( ucMenu_ID, ucKey_ID ); // 響應按鍵
ucMenu_ID = ucMENU_TABLE[ ucMenu_ID ][ ucKey_ID ]; // 狀態轉移
vMisc_buzzer_exe( ucKey_ID ); // 控制蜂鳴器
vDisp_exe( ucMenu_ID, ucCursor_M1, ucCursor_M2 ); // 刷新顯示
ucKey_ID = NO_KEY; // 鍵處理完畢,清除標志
}
else
{
}
/* --------------------------------------------- */
/* 鍵掃描,蜂鳴器 */
/* --------------------------------------------- */
if ( ucFlag_10ms_trigger == YES )
{
/* --------------------------------------------- */
/* 鍵盤掃描 間隔10ms */
/* --------------------------------------------- */
vKey_read();
/* --------------------------------------------- */
/* 蜂鳴器計時 間隔10ms */
/* --------------------------------------------- */
vMisc_buzzer_timing();
ucFlag_10ms_trigger = NO; // 處理完畢,清除標志
}
else
{
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -