您的位置:首页 > 其它

裸机调试-led,蜂鸣器,按键

2012-08-04 14:41 148 查看
最近学得比较迷茫,就调试了一下6410的裸机程序,值得注意的是OK6410的裸机程序中蜂鸣器那一段的子程序BeepOn()和BeepOff()刚好写反了,下面给出一段我自己写的led灯走马灯和蜂鸣器的综合程序,其结果是亮一个灯蜂鸣器叫一次,以下是源程序:

#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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: