#define LEDCON (*(volatile unsigned *)0x7f008820) #define LEDDAT (*(volatile unsigned *)0x7f008824) #define BEEPCON (*(volatile unsigned *)(0x7F0080A0)) #define BEEPDAT (*(volatile unsigned *)(0x7F0080A4)) #define BEEPPUD (*(volatile unsigned *)(0x7F0080A8)) void MsDelay(int time) { volatile unsigned i,j; for(i=0;i<2000000;i++) for(j=0;j<time;j++); } void beepOff() { BEEPDAT=BEEPDAT & 0x7FFF; } void beepOn() { BEEPDAT=BEEPDAT | 0x8000; } void GPIO_Init(void) { LEDCON=0x1111; BEEPCON=BEEPCON&0x3fffffff; BEEPCON=BEEPCON|0X7FFFFFFF; beepOff(); } void Test() { while(1) { volatile unsigned int sum; LEDDAT=0x0e; beepOn(); MsDelay(10); beepOff(); MsDelay(40); for(sum=1;sum<=3;sum++) { LEDDAT=LEDDAT<<1; beepOn(); MsDelay(10); beepOff(); MsDelay(40); } } } void main() { GPIO_Init(); Test(); }
更加深入的大家可以尝试写一个走马灯,不同的灯亮蜂鸣器会按照不同的频率鸣叫。
#define LEDCON (*(volatile unsigned *)0x7f008820) #define LEDDAT (*(volatile unsigned *)0x7f008824) #define BEEPCON (*(volatile unsigned *)(0x7F0080A0)) #define BEEPDAT (*(volatile unsigned *)(0x7F0080A4)) #define BEEPPUD (*(volatile unsigned *)(0x7F0080A8)) #define KEYCON (*(volatile unsigned *)(0x7F008830)) #define KEYDAT (*(volatile unsigned *)(0x7F008834)) #define KEYPUD (*(volatile unsigned *)(0x7F008838)) void MsDelay(int time) { volatile unsigned i,j; for(i=0;i<2000000;i++) for(j=0;j<time;j++); } void beepOff() { BEEPDAT=BEEPDAT & 0x7FFF; } void beepOn() { BEEPDAT=BEEPDAT | 0x8000; } void GPIO_Init(void) { LEDCON=0X1111; BEEPCON=BEEPCON&0x3fffffff; BEEPCON=BEEPCON|0X7FFFFFFF; beepOff(); KEYCON=0; KEYPUD=0; } int keyscan() { if((KEYDAT&0X3F)==0X3F) return 0; else return 1; } void Test() { volatile unsigned int sum=1,keystatus; LEDDAT=0x0f; beepOff(); while(1) { keystatus=keyscan(); if(keystatus) { beepOn(); MsDelay(5); beepOff(); LEDDAT=0x0f<<sum; sum++; if(sum==5) sum=1; } } } void main() { GPIO_Init(); Test(); }