📄 main.c
字号:
/*-----------------------------------------------------*
*工 程 名:Prgframe.prj *
*硬件连接:PTA.1接指示灯 *
*程序描述:指示灯PTA.1闪烁 *
*目 的:第一个freescale(Motorola) HC08系列MCU程序框架*
*说 明:提供Motorola MCU的编程框架,供教学入门使用 *
*注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一 *
* 直亮,这是由于人的视觉的引起的。 *
*--------《嵌入式应用技术基础教程》教学实例-----------*/
/*[头文件]*/
#include "GP32C.h" //映像寄存器地址头文件
/*[指示灯所接引脚定义]*/
#define light_a PTA //灯(Light)接在PTA口
#define light_ctrla DDRA //相应的方向寄存器
#define light_b PTB
#define light_ctrlb DDRB
#define light_pin i //灯所在的引脚
/*[全局变量声明]*/
unsigned char i;
int k;
/*[延时子函数声明]*/
void Delay1000(void);
/*[主函数]*/
void main()
{
light_ctrla|=0xff;
light_ctrlb&=~(0x03);
while(1)
{
//8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
if((light_b&0x3)==0x0)
{
light_a|=0xff;
for(i=0;i<=8;i++)
{
light_a&=~(1<<light_pin);
for(k=0;k<512;k++) //延时0.25秒
Delay1000();
}
for(i=0;i<=8;i++)
{
light_a&=~(0x80>>light_pin);
for(k=0;k<512;k++)
Delay1000();
}
}
// 8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
else if((light_b&0x3)==0x01)
{
light_a|=0xff;
for(i=0;i<=8;i++)
{
light_a&=~(3<<light_pin);
for(k=0;k<512;k++) //延时0.25秒
Delay1000();
}
for(i=0;i<=8;i++)
{
light_a&=~(0x12>>light_pin);
for(k=0;k<512;k++)
Delay1000();
}
}
// 8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒
else if((light_b&0x3)==0x02)
{
light_a|=0xff;
for(i=0;i<=8;i++)
{
light_a&=~(1<<light_pin);
for(k=0;k<1024;k++) //延时0.25秒
Delay1000();
}
for(i=0;i<=8;i++)
{
light_a&=~(0xc0>>light_pin);
for(k=0;k<1024;k++)
Delay1000();
}
}
//8个LED中只有两个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒
else if((light_b&0x3)==0x03)
{
light_a|=0xff;
for(i=0;i<=8;i++)
{
light_a&=~(3<<light_pin);
for(k=0;k<1024;k++) //延时0.25秒
Delay1000();
}
for(i=0;i<=8;i++)
{
light_a&=~(0xc0>>light_pin);
for(k=0;k<1024;k++)
Delay1000();
}
}
}
}
/*[内部子程序存放处]
/*Delay1000:延时1000个时钟周期-------------------------*
*功 能:延时函数(约1000个时钟周期) *
*参 数:无 *
*返 回:无 *
*-----------------------------------------------------*/
void Delay1000(void)
{ unsigned char u;
for(u=0;u<=110;u++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -