📄 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 + -