在使用CSMStudio创建新项目后,会得到一个称为“HelloWorld”的项目,其作用就是通过串口输出图1所示的信息。
图1输出结果 但从其生成的程序看是应该形成LED灯闪烁效果的,其程序如下:
- #include "headfile.h"
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN8,GPIO_MODE_OUTPUT);
- while(1)
- {
- Delay32M_ms(500);
- GPIO_Toggle(GPIOB,PIN8);
- }
- }
复制代码
那为什么没有看到LED等闪烁效果呢?
原来所使用的引脚不对,应从PA8、PA10及PA12中选取,将程序改为如下内容后即可获得闪烁效果。
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
- while(1)
- {
- Delay32M_ms(500);
- GPIO_Toggle(GPIOA,PIN8);
- }
- }
复制代码
在完成程序编译后,即可生成名为“mcu.elf”的目标文件。随后使用CSM-ISP下载工具,选取该文件进行下载即可。
图3选取下载文件
图4完成下载 在完成下载后,即可达到图5所示的所示效果。
图5显示效果 若在此基础上加以修改,则可以获得7色彩灯的循环显示效果。
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT);
- while(1)
- {
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN12,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN12,GPIO_SET);
- GPIO_Write(GPIOA,PIN10,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN10,GPIO_SET);
- GPIO_Write(GPIOA,PIN8,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN8,GPIO_SET);
- GPIO_Write(GPIOA,PIN12,GPIO_RESET);
- GPIO_Write(GPIOA,PIN10,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN8,GPIO_RESET);
- GPIO_Write(GPIOA,PIN12,GPIO_RESET);
- GPIO_Write(GPIOA,PIN10,GPIO_SET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN8,GPIO_RESET);
- GPIO_Write(GPIOA,PIN12,GPIO_SET);
- GPIO_Write(GPIOA,PIN10,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN8,GPIO_RESET);
- GPIO_Write(GPIOA,PIN12,GPIO_RESET);
- GPIO_Write(GPIOA,PIN10,GPIO_RESET);
- Delay32M_ms(500);
- GPIO_Write(GPIOA,PIN8,GPIO_SET);
- GPIO_Write(GPIOA,PIN12,GPIO_SET);
- GPIO_Write(GPIOA,PIN10,GPIO_SET);
- }
- }
复制代码
控制外挂LED模块的程序如下:
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
- GPIO_Write(GPIOB,PIN1,GPIO_SET);
- while(1)
- {
- GPIO_Write(GPIOB,PIN1,GPIO_SET);
- Delay32M_ms(500);
- GPIO_Write(GPIOB,PIN1,GPIO_RESET);
- Delay32M_ms(500);
- }
- }
复制代码
经程序的编译与下载,其显示效果如图6和图7所示。
图6熄灭LED模块
图7点亮LED模块 除了GPIO口的输出功能外,还可以用GPIO口的输入功能来识别按键的状态。 在连接薄膜软按键的情况下,使用下面的程序可实现感应控制的作用。
- int main(void)
- {
- CLIC_Init();
- System_Clock_Init();
- GPIO_MODE_Init(GPIOB,PIN1,GPIO_MODE_OUTPUT);
- GPIO_MODE_Init(GPIOB,PIN2,GPIO_MODE_INPUT);
- GPIO_Write(GPIOB,PIN1,GPIO_SET);
- while(1)
- {
- if(GPIO_Read(GPIOB,PIN2)==0) GPIO_Write(GPIOB,PIN1,GPIO_SET);
- else GPIO_Write(GPIOB,PIN1,GPIO_RESET);
- }
- }
复制代码
经程序的编译与下载,其显示效果如图8和图9所示。
图8熄灭LED模块
图9点亮LED模块 在掌握了GPIO口的使用后,就可以此为基础来模拟I2C接口来驱动I2C接口的OLED屏或SPI接口的LCD5110屏了。
|