本帖最后由 qq124469142 于 2011-10-8 20:33 编辑
小灯程序
本程序实现了key1控制3,4灯。key2控制1,2灯;
本人第一次写程序,写的不好,方法也很笨。
由于学校里网速的原因,我打不开芯唐官网,所以程序是在别人的模板上,自己写的
int main (void)
{
uint8_t flag1 = 0,flag2 =0;
uint8_t count1 = 0,count2 =0;
Set_System(); //封装一些初始化模块
DrvGPIO_SetBit(E_GPA,2);
DrvGPIO_SetBit(E_GPA,3);
DrvGPIO_SetBit(E_GPA,4);
DrvGPIO_SetBit(E_GPA,5);
while(1)
{ if(DrvGPIO_GetBit(E_GPB, 14)==0)
{ delay_ms(30);
if(DrvGPIO_GetBit(E_GPB, 14)==0)
flag1=1 ;
}
if(flag1)
{
if(DrvGPIO_GetBit(E_GPB, 14)==1) {
flag1=0;
count1++;}
}
if(count1>2)count1=1;
if(DrvGPIO_GetBit(E_GPB, 15)==0)
{delay_ms(30);
if(DrvGPIO_GetBit(E_GPB, 15)==0)
flag2=1;
}
if(flag2)
{
if(DrvGPIO_GetBit(E_GPB, 15)==1) {
flag2=0;
count2++;}
}
if(count2>2)count2=1;
switch(count1)
{ case 1:DrvGPIO_ClrBit(E_GPA,2);break;
case 2: DrvGPIO_ClrBit(E_GPA,3) ; break;
default:break;
}
switch(count2)
{
case 1: DrvGPIO_ClrBit(E_GPA,4);break;
case 2: DrvGPIO_ClrBit(E_GPA,5);break;
default :break ;
}
}
}
void GPIO_Configuration()
{
DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT ); //led端口设置为输出
DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
DrvGPIO_Open( E_GPB, 14, E_IO_INPUT ); //按键端口设置为输入
DrvGPIO_Open( E_GPB, 15, E_IO_INPUT );
}
void RCC_Configuration(void)
{
UNLOCKREG(); // 对写保护位操作时 需要一次向0x50000 0100写入 0x59,0x16,0x88,
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);//与其 SYSCLK->PWRCON.XTL12M_EN = 1; 等同
// PWRCON寄存器(这些寄存器在上电复位到用户解锁定之前是锁定的)除了 BIT[6]位其他位都受写保护
// 解除这些需要向 0x50000 0100写入 0x59,0x16,0x88,
// 令PWRCON寄存器的BITP[0]为1(即设定12M外部晶振)
delay_ms(100); //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);//等待外部12MHZ晶振就绪
LOCKREG(); // 向“0x5000_0100”写入任何值,就可以重锁保护寄存器 |