说明:通过处理器专家创建芯片为MC9S08DZ60的工程,按键控制LED
一、CW11.1软件界面布局
1、双击桌面图标,打开软件,设置工作空间
软件主界面
调试界面
处理器专家界面
有时经常调整(删除)面板布局,如果想恢复布局,可在Window工具栏下的Reset Perspective选项来复位面板布局
二、新建工程
1、在C/C++模式下,在Commander面板下点击New MCU project
2、创建一个裸板工程,设置工程名和存储路径(默认存储到工作空间),下一步
3、选择芯片型号
4、选择连接方式(程序调试下载方式)
5、选择编程语言
6、快速应用开发,处理器专家
7、C/C++选项
8、新建工程完成
三、底层配置
芯片具体型号选择(重要)
1、时钟设置,使能外部时钟,设置时钟频率8MHz(根据硬件的晶振频率),高速时钟设置为外部时钟
2、生成软件延时函数
查看帮助文档
点击Component MC9S08DZ60_64 Methods
// us100:word - Number of 100 us delay repetitions.
void Delay100US(word us100)
3、按键接口硬件电路
IO口 | 描述 |
PTG2 | ESC |
PTG3 | DOWN |
PTG4 | OK |
PTG5 | UP |
4、双击 BitIO,添加IO组件
Pull resister设置为 no pull resister ,因为按键电路已经有一个4.7K的上拉电阻,按键没按下IO口为高电平,按下为低电平。
生成函数GetVal();
重命名组件
5、重复相同步骤,设置另外三个按键组件
6、LED硬件电路,可以看出IO口输出低电平LED亮。
7、双击 BitIO,添加IO组件,步骤如上,方向为推挽输出,初始置为高电平
8、编译工程,生成代码。
四、编写中间件程序
1、新建文件夹
在SDK文件夹下新建源文件和头文件
在构建工程的时候,按模块分类文件夹,就存在需要包含头文件路径的问题。
选择C/C++General的Path and Symble,再选择GUN C。点击右边的 Add,点击Variables 选择ProjDirPath,在设置相应的文件路径。
2、编写代码
KeyCtr.h
#ifndef KEYCTR_H_
#define KEYCTR_H_
#include "KeyEsc.h"
#include "KeyDown.h"
#include "KeyOk.h"
#include "KeyUp.h"
#define KEYDOWN 0
#define Get_KeyEsc() KeyEsc_GetVal()
#define Get_KeyDown() KeyDown_GetVal()
#define Get_KeyOk() KeyOk_GetVal()
#define Get_KeyUp() KeyUp_GetVal()
#endif /* KEYCTR_H_ */
KeyCtr.c
#include "KeyCtr.h"
LedCtr.h
#ifndef LEDCTR_H_
#define LEDCTR_H_
#include "Led1.h"
#include "Led2.h"
#include "Led3.h"
#include "Led4.h"
#define ON 0
#define OFF 1
void Led1_onoff(bool onoff);
void Led2_onoff(bool onoff);
void Led3_onoff(bool onoff);
void Led4_onoff(bool onoff);
#endif /* LEDCTR_H_ */
LedCtr.c
#include "LedCtr.h"
void Led1_onoff(bool onoff)
{
Led1_PutVal(onoff);
}
void Led2_onoff(bool onoff)
{
Led3_PutVal(onoff);
}
void Led3_onoff(bool onoff)
{
Led3_PutVal(onoff);
}
void Led4_onoff(bool onoff)
{
Led4_PutVal(onoff);
}
五、建立应用层
1、新建文件夹
2、添加路径,新建文件(步骤如上)
3、代码编写
Task1.h
#ifndef TASK1_H_
#define TASK1_H_
#include "LedCtr.h"
#include "KeyCtr.h"
void task1(void);
#endif /* TASK1_H_ */
Task1.c
#include "Task1.h"
void task1(void)
{
if( KEYDOWN==Get_KeyEsc() )
{
Led1_onoff(ON);
}
else
{
Led1_onoff(OFF);
}
if( KEYDOWN==Get_KeyDown() )
{
Led2_onoff(ON);
}
else
{
Led2_onoff(OFF);
}
if( KEYDOWN==Get_KeyOk() )
{
Led3_onoff(ON);
}
else
{
Led3_onoff(OFF);
}
if( KEYDOWN==Get_KeyUp() )
{
Led4_onoff(ON);
}
else
{
Led4_onoff(OFF);
}
Cpu_Delay100US(100);//10ms
}
Working.h
#ifndef WORKING_H_
#define WORKING_H_
#include "Task1.h"
void runing(void);
#endif /* WORKING_H_ */
Working.c
#include "Working.h"
void runing(void)
{
for(;;)
{
task1();
}
}
4、主函数编写
5、编译,调试下载