用的是Cortex M0+中LPC812单片机
谢谢大神们指教。
源程序如下:
#include "LPC8xx.h"
#define LED1 (1 <<1) /* LED1 - P0.1 red */
#define LED2 (1 <<0) /*LED2 - P0.0 green */
#define MAX_SEC 9
#define uchar unsigned char
#define uint unsigned int
#define SEG_OFFSET 10 /* 段输出位移 */
#define SEG_PORT (0xFF<< SEG_OFFSET) /* P0.10到P0.17作为段输出端口*/
#define COM_PORT (1 << 7) /* P0.5到P0.8做位输出端口 */
/***********************************************************************
** 函数名称:segSet
** 函数功能:在SEG_PORT上输出段码
** 入口参数:seg 要输出的段码
** 出口参数:无
** 返回参数:无
***************************************************************************/
void segSet (uint seg)
{
LPC_GPIO_PORT->PIN0 &= 3; /*保证所用的两位
(单片机0.0和0.1口)初始状态*/
LPC_GPIO_PORT->PIN0 |= COM_PORT;
LPC_GPIO_PORT->PIN0 &= ~SEG_PORT;
LPC_GPIO_PORT->PIN0 |= SEG_PORT & ( seg << SEG_OFFSET);
}
void myDelay (uint32_t ulTime) {
uint32_t i;
while (ulTime--) {
for (i = 0; i < 2400; i++);
}
}
void GPIOInit (void)
{
{
LPC_SYSCON->SYSAHBCLKCTRL|=(1<<6) ;
LPC_SWM->PINENABLE0 |= (1 << 2)|(1 << 3)|(1 << 6);
LPC_GPIO_PORT->DIR0 |= SEG_PORT;
LPC_GPIO_PORT->DIR0 |= COM_PORT;
}
LPC_SYSCON->SYSAHBCLKCTRL |= ( 1<< 6); /* 初始化GPIO AHB时钟 */
LPC_GPIO_PORT->DIR0 |= LED1; /* 将P0.7方向设置为输出 */
LPC_GPIO_PORT->PIN0 |= LED1; /* P0.7输出设置为高*/
LPC_GPIO_PORT->DIR0 |= LED2;
LPC_GPIO_PORT->PIN0 |= LED2;
}
uchar table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};
int main (void)
{
int a = 1;
SystemInit(); /* 初始化目标板,切勿删除 */
GPIOInit(); /* GPIO初始化 */
while(1){
if(a) LPC_GPIO_PORT->PIN0 &= ~LED1; /* 点亮LED*/
segSet(table[9]);
myDelay(1000); /* 等效:拔掉com1的连接线*/
segSet(table[8]);
myDelay(1000);
segSet(table[7]);
myDelay(1000);
segSet(table[6]);
myDelay(1000);
segSet(table[5]);
myDelay(1000);
segSet(table[4]);
myDelay(1000);
segSet(table[3]);
myDelay(1000);
segSet(table[2]);
myDelay(1000);
segSet(table[1]);
myDelay(1000);
segSet(table[0]);
if(a)LPC_GPIO_PORT->PIN0 |= LED1; /* 熄灭LED1 */
myDelay(100); /* 延时 100ms */
if(a) {LPC_GPIO_PORT->PIN0 &= ~COM_PORT; /*关断数码管*/
LPC_GPIO_PORT->PIN0 &= ~LED2; /* 点亮LED2 */
}myDelay(7000); /*红灯常亮7s */
if(a) LPC_GPIO_PORT->PIN0 |= LED2; /* 熄灭LED2 */
myDelay(1000);
segSet(table[2]);
if(a) LPC_GPIO_PORT->PIN0 &= ~LED2; /* 点亮LED2 */
myDelay(800);
if(a) {
LPC_GPIO_PORT->PIN0 &= ~COM_PORT;
LPC_GPIO_PORT->PIN0 |= LED2; /* 熄灭LED2 */
}
myDelay(800);
if(a) LPC_GPIO_PORT->PIN0 &= ~LED2;
segSet(table[1]);
myDelay(800);
if(a) {
LPC_GPIO_PORT->PIN0 &= ~COM_PORT;
LPC_GPIO_PORT->PIN0 |= LED2;
} myDelay(800);
if(a) LPC_GPIO_PORT->PIN0 &= ~LED2;
segSet(table[0]);
myDelay(800);
if(a) {
LPC_GPIO_PORT->PIN0 &= ~COM_PORT;
LPC_GPIO_PORT->PIN0 |= LED2;
} myDelay(800);
}
}
此帖出自
小平头技术问答
一周热门 更多>