当前位置:文档之家› 流水灯小程序

流水灯小程序

流水灯小程序
流水灯小程序

流水灯小程序

#include

void delay() //延时函数,这里延时100ms

{

int i,j;

for(i=0;i<100;i++)

{

for(j=0;j<2242;j++){} //j循环一次大概1ms

}

}

void main()

{ //这里看LED原理图LPC_IOCON->JTAG_TMS_PIO1_0=0x01;//定义p1.0引脚为输出

LPC_IOCON->JTAG_TDO_PIO1_1=0x01;//定义p1.1引脚为输出

LPC_IOCON->JTAG_nTRST_PIO1_2=0x01;//定义p1.2引脚为输出

//p1.9引脚默认为输出,不用写

LPC_GPIO1->DIR=(1<<0)+(1<<1)+(1<<2)+(1<<9);

LPC_GPIO1->DA TA=(1<<0)|(1<<1)|(1<<2)|(1<<9); //D1、D2、D3、D4灯全灭

while(1)

{

LPC_GPIO1->DA TA&=~(1<<0);//D1灯亮

delay(); //调用延时函数

LPC_GPIO1->DA TA|=(1<<0);//D1灯灭

delay();

LPC_GPIO1->DA TA&=~(1<<1);//D2灯亮

delay();

LPC_GPIO1->DA TA|=(1<<1);//D2灯灭

delay();

LPC_GPIO1->DA TA&=~(1<<2);//D3灯亮

delay();

LPC_GPIO1->DA TA|=(1<<2);//D3灯灭

delay();

LPC_GPIO1->DA TA&=~(1<<9);//D4灯亮

delay();

LPC_GPIO1->DA TA|=(1<<9);//D4灯灭

delay();

}

}

显示1234

# include

int main(void)

{

const int table[4]={0x06,0x5b,0x4f,0x66,};//定义一个数组

LPC_IOCON->JTAG_TDI_PIO0_11=0x01;//定义p1.1为输出

//LPC_IOCON->PIO3_4=0x01; //默认为输出

//LPC_IOCON->PIO3_5=0x01; //默认为输出

LPC_GPIO3->DIR|=(1<<4)|(1<<5);//P3.4与P3.5输出

LPC_GPIO0->DIR|=(1<<3)|(1<<11); //定义P0.3与P0.11为输

LPC_GPIO2->DIR|=0XFF+(1<<11); //定义P2.0~P2.7和

P2.11为输出

//这是将四个数码管的引脚都设置为输出

LPC_GPIO2->DA TA|=0xff; //定义P2.0~P2.7输出高电平

LPC_GPIO0->DA TA|=1<<3; //定义P0.3输出为高电平

LPC_GPIO2->DA TA|=(1<<11); //定义P2.11输出高电平

LPC_GPIO3->DA TA|=(1<<4); //定义P3.4输出高电平

LPC_GPIO3->DA TA|=(1<<5); //定义P3.5输出高电平

while(1)

{

LPC_GPIO0->DA TA&=~(1<<11); //定义P0.11输出

低电平,导通

LPC_GPIO2->DA TA&=~table[0];//调用一个数组,因为为

公共用到的引脚,所以要设置它为一开一关的形式

LPC_GPIO0->DA TA|=(1<<11); //定义P0.11输出高电

平,息灭

LPC_GPIO2->DA TA|=0xff; //定义P2.0~2.7输出高电

平,截止

LPC_GPIO2->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~table[1];

LPC_GPIO2->DA TA|=(1<<11);

LPC_GPIO2->DA TA|=0xff;

LPC_GPIO3->DA TA&=~(1<<4);

LPC_GPIO2->DA TA&=~table[2];

LPC_GPIO3->DA TA|=(1<<4);

LPC_GPIO2->DA TA|=0xff;

LPC_GPIO3->DA TA&=~(1<<5);

LPC_GPIO2->DA TA&=~table[3];

LPC_GPIO3->DA TA|=(1<<5);

LPC_GPIO2->DA TA|=0xff;

}

}

显示1的程序

#include

int main(void)

{

const int table[1]={0xff};//定义一个数组

LPC_IOCON->JTAG_TDO_PIO1_1=0x01;//定义p1.1为输出

LPC_GPIO0->DIR|=1<<3; //定义P0.3为输出

LPC_GPIO0->DIR|=1<<11; //定义P0.11为输出

LPC_GPIO2->DIR=0XFF; //定义P2.0~P2.7为输出

LPC_GPIO2->DA TA=0xff; //定义P2.0~P2.7输出高电平LPC_GPIO0->DA TA|=1<<3; //定义P0.3输出为高电平

int i;

for(i=0;i<10;i++)

{

LPC_GPIO0->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~table[0];//调用一个数组

//int i=1024;

}

}

#include"lpc11xx.h"

int main(void)

{

#define LE_1 LPC_GPIO0->DA TA|=(1<<3) //74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t

table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

while(1)

{

int i;

for(i=0;i<4;i++)

{

LED0_OFF; LED1_OFF;

LED2_OFF; LED3_OFF;

char ch = table[4];

LPC_GPIO2->DA TA = ~ ch;

switch(i)

{

case 0: LED0_ON; break;

case 1: LED1_ON;break;

case 2: LED2_ON; break;

case 3: LED3_ON;break;

}

}

// CoTickDelay(1);

}

}

/*****头文件与宏定义*****/

#include"lpc11xx.h"

#define uint unsigned int

#define uchar unsigned char

#define on LPC_GPIO2->DA TA|=0x00

/*****延时函数*****/

void delay()

{

int i,j;

for(i=1;i<20;i++)

for(j=1;j<1141;j++);

}

/*****数码管显示函数*****/

void show_number(num)//输入不大于四位整数

{

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to IO

LPC_GPIO0->DIR|=(1<<3)|(1<<11); //set P0_3 to input

LPC_GPIO2->DIR|=0xff|(1<<11); //set P2_0~P2_7 to input

LPC_GPIO3->DIR|=(1<<5)|(1<<4); //set P3_5 and P3_4 to

input

LPC_GPIO0->DA TA|=(1<<3); //P0_3输出高电平驱动

DM25LS573WM,使P2_0~P2_7导通到数码管

uint i=num;

const uint show[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };//显示0~9

LPC_GPIO0->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~show[(i/1000)%10];

LPC_GPIO0->DA TA|=(1<<11);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO2->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~show[(i/100)%10];

LPC_GPIO2->DA TA|=(1<<11);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO3->DA TA&=~(1<<4);

LPC_GPIO2->DA TA&=~show[(i/10)%10];

LPC_GPIO3->DA TA|=(1<<4);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO3->DA TA&=~(1<<5);

LPC_GPIO2->DA TA&=~show[i%10];

LPC_GPIO3->DA TA|=(1<<5);

LPC_GPIO2->DA TA=0xffff;

}

/*****主函数*****/

int main(void)

{

while(1)

{

int a,b;

for( a=0;a<9999;a++)//1LED

{

for(b=1;b<20000;b++)

show_number(a);

}

}

}

#include "LPC11xx.h"

void delay() // 软件延时函数

{

int i,j;

for(i=1;i<2000;i++)

for(j = 0; j<1024;j++);

}

int main()

{

// LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to

IO

LPC_GPIO0->DIR=(1<<3);

LPC_GPIO2->DIR=0xff;

LPC_GPIO3->DIR=(1<<5);

const char number

[10]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f};

while(1)

{

LPC_GPIO0->DA TA|=(1<<3);

LPC_GPIO3->DA TA&=~(1<<5);

int i;

for( i=0;i<10;i++)//1LED

{

LPC_GPIO2->DA TA=~number [i];

delay ();

// LPC_GPIO3->DA TA|=(1<<5);

}

}

}

#include"lpc11xx.h"

void delay()

{

int i,j;

for(i=1;i<1000;i++)

{

for(j=1;j<1141;j++){};

}

}

int main(void)

{

LPC_IOCON->JTAG_TMS_PIO1_0=0x01;//JTAG_TMS_P

IO1_0=0X01;

LPC_IOCON->JTAG_TDO_PIO1_1=0X01;

LPC_IOCON->JTAG_nTRST_PIO1_2=0X01; //set to IO

LPC_GPIO1->DIR|=((1<<0)|(1<<1)|(1<<2)|(1<<9));

LPC_GPIO1->DA TA|=((1<<0)|(1<<1)|(1<<2)|(1<<9));

// LPC_GPIO1->DA TA;

while(1)

{

LPC_GPIO1->DA TA&=~(1<<0);//input

delay();

LPC_GPIO1->DA TA|=(1<<0);

// delay();

LPC_GPIO1->DA TA&=~(1<<1);

delay();

LPC_GPIO1->DA TA|=(1<<1);

// delay();

LPC_GPIO1->DA TA&=~(1<<2);

delay();

LPC_GPIO1->DA TA|=(1<<2);

// delay();

LPC_GPIO1->DA TA&=~(1<<9);

delay();

LPC_GPIO1->DA TA|=(1<<9);

// delay();

}

}

/************************************************* *********

*

*

*

************************************************** *********/

#include "LPC11xx.h"

#include "UART.H"

/*************************************************

*********/

/*************************************************

*********/

/*************************************************

*********/

unsigned char key(void);

void key_init(void);

void key_to_UART(void);

void delay_ms(uint32_t a) //软件延时函数

{

uint32_t i;

while( --a != 0){

for(i = 0; i<5500; i++);

}

}

/*************************************************

*********/

int main(void)

{

SystemInit();

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to

IO

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);

LPC_GPIO0->DIR|=((1<<3)|(1<<11)|(1<<2));

LPC_GPIO2->DIR=0x0000ffff;

LPC_GPIO3->DIR=0xff;

UARTInit(115200);

UARTSend("UART TEST !",11);

key_init();

while(1)

{

key_to_UART();

}

}

/*************************************************

*********/

void key_init(void)

{

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

}

unsigned char key(void)

{

unsigned char key=0;

LPC_GPIO1->DA TA&=~(1<<8); //P1.8 L

LPC_GPIO1->DA TA|=(1<<5); //P1.5 H

if((LPC_GPIO1->DA TA&(1<<10))==0)

{

delay_ms(3);

if((LPC_GPIO1->DA TA&(1<<10))==0)

key=1;

}

if((LPC_GPIO2->DA TA&(1<<8))==0)

{

delay_ms(3);

if((LPC_GPIO2->DA TA&(1<<8))==0)

key=2;

}

if((LPC_GPIO2->DA TA&(1<<9))==0)

{

delay_ms(3);

if((LPC_GPIO2->DA TA&(1<<9))==0)

key=3;

}

LPC_GPIO1->DA TA|=(1<<8); //P1.8 L LPC_GPIO1->DA TA&=~(1<<5); //P1.5 H if((LPC_GPIO1->DA TA&(1<<10))==0)

{

delay_ms(3);

if((LPC_GPIO1->DA TA&(1<<10))==0)

key=4;

}

if((LPC_GPIO2->DA TA&(1<<8))==0)

{

delay_ms(3);

if((LPC_GPIO2->DA TA&(1<<8))==0)

key=5;

}

if((LPC_GPIO2->DA TA&(1<<9))==0) {

delay_ms(3);

if((LPC_GPIO2->DA TA&(1<<9))==0)

key=6;

}

return key;

}

void key_to_UART(void)

{

uint8_t key_data=0;

key_data=key();

if(key_data!=0)

{

switch(key_data)

{

case 1:

UARTSend("按键1按下",10);

break;

case 2:

UARTSend("按键2按下",10);

break;

case 3:

UARTSend("按键3按下",10);

break;

case 4:

UARTSend("按键4按下",10);

break;

case 5:

UARTSend("按键5按下",10);

break;

case 6:

UARTSend("按键6按下",10);

break;

}

}

}

/*************************************************

*********/

/*****头文件与宏定义*****/

#include"lpc11xx.h"

#define uint unsigned int

#define uchar unsigned char

#define on LPC_GPIO2->DA TA|=0x00

/*****延时函数*****/

void delay()

{

int i,j;

for(i=1;i<20;i++)

for(j=1;j<1141;j++);

}

/*****数码管显示函数*****/

void show_number(num)//输入不大于四位整数

{

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to IO

LPC_GPIO0->DIR|=(1<<3)|(1<<11); //set P0_3 to input

LPC_GPIO2->DIR|=0xff|(1<<11); //set P2_0~P2_7 to

input

LPC_GPIO3->DIR|=(1<<5)|(1<<4); //set P3_5 and P3_4 to

input

LPC_GPIO0->DA TA|=(1<<3); //P0_3输出高电平驱动

DM25LS573WM,使P2_0~P2_7导通到数码管

uint i=num;

const uint

show[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

};//显示0~9

LPC_GPIO0->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~show[(i/1000)%10];

LPC_GPIO0->DA TA|=(1<<11);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO2->DA TA&=~(1<<11);

LPC_GPIO2->DA TA&=~show[(i/100)%10];

LPC_GPIO2->DA TA|=(1<<11);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO3->DA TA&=~(1<<4);

LPC_GPIO2->DA TA&=~show[(i/10)%10]; LPC_GPIO3->DA TA|=(1<<4);

LPC_GPIO2->DA TA=0xffff;

LPC_GPIO3->DA TA&=~(1<<5);

LPC_GPIO2->DA TA&=~show[i%10]; LPC_GPIO3->DA TA|=(1<<5);

LPC_GPIO2->DA TA=0xffff;

}

/*****主函数*****/

int main(void)

{

while(1)

{

LPC_GPIO1->DIR|=((1<<5)|(1<<10)); LPC_GPIO2->DIR|=((1<<8)|(1<<9)); LPC_GPIO1->DA TA|=(1<<10);

LPC_GPIO1->DA TA |=(1<<5);

LPC_GPIO2->DA TA|=((1<<8)|(1<<9)); LPC_GPIO1->DIR&=~(1<<10);

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

int a=0,b=1;

a=0xff;

a&=((LPC_GPIO2->DATA)&(1<<8));

// show_number(6311);

b=0xff;

if(a==b)

{

show_number(6311);

// LPC_GPIO0->DA TA&=~(1<<11);

// show_number(1234);

// break;

}

else

{

show_number(6935);

}

// show_number(6935);

}

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include "clock.h"

#define PRIORITY_BLINK_TASK0 3 /* Priority of

Blink task 0 */

#define PRIORITY_BLINK_TASK1 4 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK2 2 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK3 5

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

void taskCLock(void *param);

void taskBlink1(void *param);

void display();

void keyScan();

int main(void)

{

/* Enable GPIO block clock */

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G

PIO, ENABLE);

CoInitOS();

CoCreateTask( taskCLock,(void *)0,3,

&stkBlink0[SIZE_BLINK_TASK0-1],100 );

CoCreateTask( taskBlink1,(void *)0, 4,

&stkBlink1[SIZE_BLINK_TASK1-1],100 );

CoCreateTask(display,(void*)0,2,

&stkBlink2[SIZE_BLINK_TASK2-1], 100 );

CoCreateTask(keyScan,(void*)0,5,&stkBlink3[SIZE_BLIN

K_TASK3-1],100 );

CoStartOS();

while(1);

}

void adjustShowPos(volatile char* pPos){

pPos[0]+= 2;

pPos[0] %=4;

}

void updateString( char ch, char* pchar, BOOL show){

if(show){

pchar[0] = ch/10;

pchar[1] = ch%10;

}else {

pchar[0] = 11;//black

pchar[1] = 11;//black

}

}

void updataTime(struct Time* pTime){

pTime->seconds ++;

if(pTime->seconds>= 60){

pTime->seconds -= 60;

pTime->min ++;

if(pTime->min >=60){

pTime->min -= 60;

pTime->hour ++;

pTime->hour %= 24;

//updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

}

//updateString(pTime->min,pTime->ts.TMS.min,TRUE); }

updateString(pTime->hour,pTime->ts.TMS.hour,TRUE); updateString(pTime->min,pTime->ts.TMS.min,TRUE); updateString(pTime->seconds, pTime->ts.TMS.sec,TRUE);

}

static struct Time time;

void display(){

#define LE_1 LPC_GPIO0->DA TA|=(1<<3)

//74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t

table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11)|(1<<2));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

time.showPos =2;

while(1){

int i;

for(i=0;i<4;i++){

LED0_OFF;

LED1_OFF;

LED2_OFF;

LED3_OFF;

{

char pos = i + time.showPos;

char ch = table[time.ts.str[pos]];

if(pos ==3) ch += 0x80;

LPC_GPIO2->DA TA = ~ ch;

}

switch(i){

case 0:

LED0_ON;

break;

case 1:

LED1_ON;

break;

case 2:

LED2_ON;

break;

case 3:

LED3_ON;

break;

}

CoTickDelay(1);

}

}

}

void taskCLock(void *param)

{

time.hour =

time.min =

time.seconds = 0;

{

int i;

for(i=0;i<6;i++) time.ts.str[i]= 0;

}

BOOL showLED = TRUE;

for(;;){

switch(time.showMode.sm ){

case ShowNormal:

updataTime(&time);

break;

case ShowAdjustSec:

time.showPos = 2;

updateString(time.seconds,time.ts.TMS.sec,showLED);

break;

case ShowAdjudtMin:

updateString(time.min,time.ts.TMS.min,showLED);

break;

case ShowAdjustHour:

time.showPos =0;

updateString(time.hour,time.ts.TMS.hour,showLED);

break;

}

showLED = !showLED;

CoTickDelay(100);

}

}

void taskBlink1(void *param)

{

LPC_IOCON->JTAG_TDO_PIO1_1 =1;

LPC_IOCON->JTAG_TMS_PIO1_0 =1;

LPC_IOCON->JTAG_nTRST_PIO1_2 =1;

LPC_GPIO1->DIR = (1<<0)+(1<<1)+(1<<2);

while(1){

int i;

for(i=0;i<3;i++){

unsigned int ch = ~(1<

// LPC_GPIO1->DA TA |= ch;

// LPC_GPIO1->DA TA &= ~ch;

int j;

for(j=0;j<3;j++){

LPC_GPIO1->MASKED_ACCESS[1<

= (ch%2)<

ch >>= 1;

}

//LPC_GPIO1->MASKED_ACCESS[1<<1] =

(ch%2)<<1;

//ch >>= 1;

//LPC_GPIO1->MASKED_ACCESS[1<<2] =

(ch%2)<<2;

CoTickDelay(100);

}

}

}

void keyScan(){

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO1->DA TA&=~((1<<8)|(1<<5)); //P1.8 L

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

while(1){

int x= LPC_GPIO2->DA TA;

if((LPC_GPIO2->DA TA&(1<<8))==0)

{

CoTickDelay(2);

if((LPC_GPIO2->DA TA&(1<<8))==0){//down

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds--;

if(time.seconds<0) time.seconds =59;

break;

case ShowAdjudtMin:

time.min--;

if(time.min < 0 ) time.min = 59;

break;

case ShowAdjustHour:

time.hour--;

if(time.hour < 0) time.hour = 23;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<8))==0)CoTickDelay(2);

}

if((LPC_GPIO2->DA TA&(1<<9))==0)

{

CoTickDelay(2);

if((LPC_GPIO2->DA TA&(1<<9))==0){//up

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds++;

if(time.seconds >=60)

time.seconds -= 60;

break;

case ShowAdjudtMin:

time.min++;

if(time.min >=60) time.min -=

60;

break;

case ShowAdjustHour:

if(time.hour >= 24) time.hour -= 24;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<9))==0)CoTickDelay(2);

}

if((LPC_GPIO1->DA TA&(1<<10))==0)

{

CoTickDelay(2);

if((LPC_GPIO1->DA TA&(1<<10))==0){//mode

time.showMode.smChar ++;

time.showMode.smChar %=4;

if(time.showMode.sm == ShowNormal){

time.showPos =2;

}

}

while((LPC_GPIO1->DA TA&(1<<10))==0)CoTickDelay(2 );

}

CoTickDelay(2);

}

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include"001.h"

void SEG1();

void SEG2();

void SEG3();

void SEG4();

void IO();

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

int main(void)

{

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G

PIO, ENABLE);

CoInitOS();

IO();

CoCreateTask( SEG1,(void *)0,3,

&stkBlink0[SIZE_BLINK_TASK0-1],100 );

CoCreateTask( SEG2,(void *)0, 4,

&stkBlink1[SIZE_BLINK_TASK1-1],100 );

CoCreateTask(SEG3,(void*)0,2,

&stkBlink2[SIZE_BLINK_TASK2-1], 100 );

CoCreateTask(SEG4,(void*)0,5,&stkBlink3[SIZE_BLINK_

TASK3-1],100 );

CoStartOS();

while(1);

}

void IO()

{

LPC_IOCON->JTAG_TMS_PIO1_0=0X01;

LPC_IOCON->JTAG_TDO_PIO1_1=0X01;

LPC_IOCON->JTAG_nTRST_PIO1_2=0X01; //set to IO

LPC_GPIO1->DIR|=((1<<0)|(1<<1)|(1<<2)|(1<<9));

LPC_GPIO0->DA TA|=(1<<3);

LPC_GPIO1->DA TA|=((1<<0)|(1<<1)|(1<<2)|(1<<9));

}

void SEG1()

{

#define LE_1 LPC_GPIO0->DA TA|=(1<<3)

//74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11|=0x01; //set to IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

while(1)

{

int i;

for(i=0;i<4;i++)

{

LED0_OFF; LED1_OFF;

LED2_OFF; LED3_OFF;

LPC_GPIO3->DA TA=0xff;

char ch = table[i];

LPC_GPIO2->DA TA = ~ ch;

switch(i)

{

case 0: LED0_ON; break;

case 1: LED1_ON;break;

case 2: LED2_ON; break;

case 3: LED3_ON;break;

}

}

// CoTickDelay(1);

}

} void SEG2()

{

while(1)

{

CoTickDelay(200);

LPC_GPIO1->DA TA&=~(1<<1);

CoTickDelay(100);

LPC_GPIO1->DA TA|=(1<<1);

CoTickDelay(200);

}

}

void SEG3()

{

while(1)

{

CoTickDelay(200);

LPC_GPIO1->DA TA&=~(1<<2);

CoTickDelay(100);

LPC_GPIO1->DA TA|=(1<<2);

CoTickDelay(100);

}

}

void SEG4()

{

while(1)

{

CoTickDelay(300);

LPC_GPIO1->DA TA&=~(1<<9);

CoTickDelay(100);

LPC_GPIO1->DA TA|=(1<<9);

}

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include "clock.h"

#define PRIORITY_BLINK_TASK0 3 /* Priority of

Blink task 0 */

#define PRIORITY_BLINK_TASK1 4 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK2 2 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK3 5

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

void taskCLock(void *param);

void taskBlink1(void *param);

void display();

void keyScan();

int main(void)

{

/* Enable GPIO block clock */

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G PIO, ENABLE);

CoInitOS();

CoCreateTask( taskCLock,

(void *)0,

PRIORITY_BLINK_TASK0,

&stkBlink0[SIZE_BLINK_TASK0-1],

SIZE_BLINK_TASK0 );

CoCreateTask( taskBlink1,

(void *)0,

PRIORITY_BLINK_TASK1,

&stkBlink1[SIZE_BLINK_TASK1-1],

SIZE_BLINK_TASK1 );

CoCreateTask(display,

(void*)0,

PRIORITY_BLINK_TASK2,

&stkBlink2[SIZE_BLINK_TASK2-1],

SIZE_BLINK_TASK2 );

CoCreateTask(keyScan,

(void*)0,

PRIORITY_BLINK_TASK3,

&stkBlink3[SIZE_BLINK_TASK3-1],

SIZE_BLINK_TASK3 );

CoStartOS();

while(1);

}/*

void adjustShowPos(volatile char* pPos){//调整显示位置

pPos[0]+= 2;

pPos[0] %=4;

}

void updateString( char ch, char* pchar, BOOL show){//显示

当前位置时间或更新时间时,更新位置的闪烁显示

if(show){

pchar[0] = ch/10;

pchar[1] = ch%10;

}else {

pchar[0] = 10;//black

pchar[1] = 10;//black

}

}

void updataTime(struct Time* pTime){//

pTime->seconds ++;

if(pTime->seconds>= 60){

pTime->seconds -= 60;

pTime->min ++;

if(pTime->min >=60){

pTime->min -= 60;

pTime->hour ++;

pTime->hour %= 24;

//updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

}

//updateString(pTime->min,pTime->ts.TMS.min,TRUE);

}

updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

updateString(pTime->min,pTime->ts.TMS.min,TRUE);

updateString(pTime->seconds, pTime->ts.TMS.sec,TRUE);

pTime->blink.tida = !pTime->blink.tida;

}

static struct Time time;*/

void display(){

#define LE_1 LPC_GPIO0->DA TA|=(1<<3)

//74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t

table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11 |= 0x01; //set to

IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11)|(1<<2));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

// time.showPos =2;

while(1){

int i;

for(i=0;i<4;i++){

LED0_OFF;

LED1_OFF;

LED2_OFF;

LED3_OFF;

{

char pos = i + time.showPos;

char ch = table[1];

// if(pos ==3 && time.blink.tida) {

// ch += 0x80;

// }

LPC_GPIO2->DA TA = ~ ch;

}

switch(i){

case 0:

LED0_ON;

break;

case 1:

LED1_ON;

break;

case 2:

LED2_ON;

break;

case 3:

LED3_ON;

break;

}

CoTickDelay(1);

}

}

}

void taskCLock(void *param)

{/*

time.hour =

time.min =

time.seconds = 0;

{

int i;

for(i=0;i<6;i++) time.ts.str[i]= 0;

}

BOOL showLED = TRUE;

for(;;){

switch(time.showMode.sm ){

case ShowNormal:

updataTime(&time);

break;

case ShowAdjustSec:

time.showPos = 2;

updateString(time.seconds,time.ts.TMS.sec,showLED);

break;

case ShowAdjudtMin:

updateString(time.min,time.ts.TMS.min,showLED);

break;

case ShowAdjustHour:

time.showPos =0;

updateString(time.hour,time.ts.TMS.hour,showLED);

break;

}

showLED = !showLED;

//time.blink.tida = !time.blink.tida;

CoTickDelay(100);

//showLED = !showLED;

//time.blink.tida = !time.blink.tida;

//CoTickDelay(50);

}*/

CoTickDelay(1);

}

void taskBlink1(void *param)

{/*

LPC_IOCON->JTAG_TDO_PIO1_1 =1;

LPC_IOCON->JTAG_TMS_PIO1_0 =1;

LPC_IOCON->JTAG_nTRST_PIO1_2 =1;

LPC_GPIO1->DIR = (1<<0)+(1<<1)+(1<<2);

while(1){

int i;

for(i=0;i<3;i++){

unsigned int ch = ~(1<

// LPC_GPIO1->DA TA |= ch;

// LPC_GPIO1->DA TA &= ~ch;

int j;

for(j=0;j<3;j++){

LPC_GPIO1->MASKED_ACCESS[1<

= (ch%2)<

ch >>= 1;

}

//LPC_GPIO1->MASKED_ACCESS[1<<1] =

(ch%2)<<1;

//ch >>= 1;

//LPC_GPIO1->MASKED_ACCESS[1<<2] =

(ch%2)<<2;

CoTickDelay(100);

}

}*/

CoTickDelay(1);

}

void keyScan(){/*

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO1->DA TA&=~((1<<8)|(1<<5)); //P1.8 L

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

while(1){

//int x= LPC_GPIO2->DA TA;

if((LPC_GPIO2->DA TA&(1<<8))==0)

{

CoTickDelay(2);

if((LPC_GPIO2->DA TA&(1<<8))==0){//down

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds--;

if(time.seconds<0) time.seconds =59;

break;

case ShowAdjudtMin:

time.min--;

if(time.min < 0 ) time.min = 59;

break;

case ShowAdjustHour:

time.hour--;

if(time.hour < 0) time.hour = 23;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<8))==0)CoTickDelay(2);

}

if((LPC_GPIO2->DA TA&(1<<9))==0)

{

CoTickDelay(2);

if((LPC_GPIO2->DA TA&(1<<9))==0){//up

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds++;

if(time.seconds >=60)

time.seconds -= 60;

break;

case ShowAdjudtMin:

time.min++;

if(time.min >=60) time.min -=

60;

break;

case ShowAdjustHour:

if(time.hour >= 24) time.hour -=

24;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<9))==0)CoTickDelay(2);

}

if((LPC_GPIO1->DA TA&(1<<10))==0)

{

CoTickDelay(2);

if((LPC_GPIO1->DA TA&(1<<10))==0){//mode

time.showMode.smChar ++;

time.showMode.smChar %=4;

if(time.showMode.sm == ShowNormal){

time.showPos =2;

}

}

while((LPC_GPIO1->DA TA&(1<<10))==0)CoTickDelay(2

);

}

CoTickDelay(2);

}*/

CoTickDelay(1);

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include "clock.h"

#define PRIORITY_BLINK_TASK0 3 /* Priority of

Blink task 0 */

#define PRIORITY_BLINK_TASK1 4 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK2 2 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK3 5

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

void taskCLock(void *param);

void taskBlink1(void *param);

void display();

void initKeys(KeyHandle keyHandle);

static union KeyArrays keyArray;

static struct Time time;

static unsigned char currentTimeMs =0;

int main(void)

{

/* Enable GPIO block clock */

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G PIO, ENABLE);

initKeys(&keyArray);

while(1);

}

void initKeys(KeyHandle keyHandle){

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO1->MASKED_ACCESS[(1<<8) + (1<<5)] = 0; //P1.8 L

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

LPC_GPIO1->IS = 0;

LPC_GPIO1->IBE = 0;

LPC_GPIO1->IEV = 1<<10;

LPC_GPIO1->IE = 1<<10;

LPC_GPIO2->IS =0;

LPC_GPIO2->IBE = 0;

LPC_GPIO2->IEV = (1<<8) +(1<<9);

LPC_GPIO2->IE = (1<<8) +(1<<9);

NVIC_EnableIRQ(EINT1_IRQn);

NVIC_EnableIRQ(EINT2_IRQn);

//LPC_GPIO1->IC = 1<<10;

//LPC_GPIO2->IC = (1<<8) +(1<<9);

}

void PIOINT1_IRQHandler(void){

//

LPC_GPIO1->IC = 1<<10;

}

void PIOINT2_IRQHandler(void){

//

LPC_GPIO2->IC = (1<<8) +(1<<9);

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include "clock.h"

#define PRIORITY_BLINK_TASK0 3 /* Priority of

Blink task 0 */

#define PRIORITY_BLINK_TASK1 4 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK2 2 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK3 5

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

void taskCLock(void *param);

void taskBlink1(void *param);

void display();

void keyScan();

int main(void)

{

/* Enable GPIO block clock */

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G

PIO, ENABLE);

CoInitOS();

CoCreateTask( taskCLock,

(void *)0,

PRIORITY_BLINK_TASK0,

&stkBlink0[SIZE_BLINK_TASK0-1],

SIZE_BLINK_TASK0 ); CoCreateTask( taskBlink1,

(void *)0,

PRIORITY_BLINK_TASK1,

&stkBlink1[SIZE_BLINK_TASK1-1],

SIZE_BLINK_TASK1 ); CoCreateTask(display,

(void*)0,

PRIORITY_BLINK_TASK2,

&stkBlink2[SIZE_BLINK_TASK2-1],

SIZE_BLINK_TASK2 );

CoCreateTask(keyScan,

(void*)0,

PRIORITY_BLINK_TASK3,

&stkBlink3[SIZE_BLINK_TASK3-1],

SIZE_BLINK_TASK3 );

CoStartOS();

while(1);

}

void adjustShowPos(volatile char* pPos){

pPos[0]+= 2;

pPos[0] %=4;

}

void updateString( char ch, char* pchar, BOOL show){

if(show){

pchar[0] = ch/10;

pchar[1] = ch%10;

}else {

pchar[0] = 11;//black

pchar[1] = 11;//black

}

}

void updataTime(struct Time* pTime){

pTime->seconds ++;

if(pTime->seconds>= 60){

pTime->seconds -= 60;

pTime->min ++;

if(pTime->min >=60){

pTime->min -= 60;

pTime->hour ++;

pTime->hour %= 24;

//updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

}

//updateString(pTime->min,pTime->ts.TMS.min,TRUE);

}

updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

updateString(pTime->min,pTime->ts.TMS.min,TRUE);

updateString(pTime->seconds, pTime->ts.TMS.sec,TRUE);

pTime->blink.tida = !pTime->blink.tida;

}

static struct Time time;

void display(){

#define LE_1 LPC_GPIO0->DA TA|=(1<<3)

//74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t

table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11 |= 0x01; //set to

IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11)|(1<<2));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

time.showPos =2;

while(1){

int i;

for(i=0;i<4;i++){

LED0_OFF;

LED1_OFF;

LED2_OFF;

LED3_OFF;

{

char pos = i + time.showPos;

char ch = table[time.ts.str[pos]];

if(pos ==3 && time.blink.tida) {

ch += 0x80;

}

LPC_GPIO2->DA TA = ~ ch;

}

switch(i){

case 0:

LED0_ON;

break;

case 1:

LED1_ON;

break;

case 2:

LED2_ON;

break;

case 3:

LED3_ON;

break;

}

CoTickDelay(1);

}

}

}

void taskCLock(void *param)

{

time.hour =1;

time.min =34;

time.seconds = 56;

{

int i;

for(i=0;i<6;i++) time.ts.str[i]= 0;

}

BOOL showLED = TRUE;

for(;;){

switch(time.showMode.sm ){

case ShowNormal:

updataTime(&time);

break;

case ShowAdjustSec:

time.showPos = 2;

updateString(time.seconds,time.ts.TMS.sec,showLED);

break;

case ShowAdjudtMin:

updateString(time.min,time.ts.TMS.min,showLED);

break;

case ShowAdjustHour:

time.showPos =0;

updateString(time.hour,time.ts.TMS.hour,showLED);

break;

}

showLED = !showLED;

//time.blink.tida = !time.blink.tida;

CoTickDelay(1000);

//showLED = !showLED;

//time.blink.tida = !time.blink.tida;

//CoTickDelay(50);

}

}

void taskBlink1(void *param)

{

LPC_IOCON->JTAG_TDO_PIO1_1 =1;

LPC_IOCON->JTAG_TMS_PIO1_0 =1;

LPC_IOCON->JTAG_nTRST_PIO1_2 =1;

LPC_GPIO1->DIR = (1<<0)+(1<<1)+(1<<2);

while(1){

int i;

for(i=0;i<3;i++){

unsigned int ch = ~(1<

// LPC_GPIO1->DA TA |= ch;

// LPC_GPIO1->DA TA &= ~ch;

/* int j;

for(j=0;j<3;j++){

LPC_GPIO1->MASKED_ACCESS[1<

= (ch%2)<

ch >>= 1;

}*/

//LPC_GPIO1->MASKED_ACCESS[1<<1] =

(ch%2)<<1;

//ch >>= 1;

//LPC_GPIO1->MASKED_ACCESS[1<<2] =

(ch%2)<<2;

LPC_GPIO1->MASKED_ACCESS[(1<<0) +

(1<<1) + (1<<2)] = ch;

CoTickDelay(100);

}

}

}

void keyScan(){

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO1->DA TA&=~((1<<8)|(1<<5)); //P1.8 L

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

while(1){

//int x= LPC_GPIO2->DA TA;

if((LPC_GPIO2->DA TA&(1<<8))==0)

{

CoTickDelay(20);

if((LPC_GPIO2->DA TA&(1<<8))==0){//down

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds--;

if(time.seconds<0) time.seconds =59;

break;

case ShowAdjudtMin:

time.min--;

if(time.min < 0 ) time.min = 59;

break;

case ShowAdjustHour:

time.hour--;

if(time.hour < 0) time.hour = 23;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<8))==0)CoTickDelay(2);

}

if((LPC_GPIO2->DA TA&(1<<9))==0)

{

CoTickDelay(20);

if((LPC_GPIO2->DA TA&(1<<9))==0){//up

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds++;

if(time.seconds >=60) time.seconds -= 60;

break;

case ShowAdjudtMin:

time.min++;

if(time.min >=60) time.min -= 60;

break;

case ShowAdjustHour:

if(time.hour >= 24) time.hour -= 24;

break;

}

}

while((LPC_GPIO2->DA TA&(1<<9))==0)CoTickDelay(2);

}

if((LPC_GPIO1->DA TA&(1<<10))==0)

{

CoTickDelay(20);

if((LPC_GPIO1->DA TA&(1<<10))==0){//mode

time.showMode.smChar ++;

time.showMode.smChar %=4;

if(time.showMode.sm == ShowNormal){

time.showPos =2;

}

}

while((LPC_GPIO1->DA TA&(1<<10))==0)CoTickDelay(2

);

}

CoTickDelay(2);

}

}

#include "lpc11xx_syscon.h"

#include "lpc11xx_gpio.h"

#include "coos.h"

#include "clock.h"

#define PRIORITY_BLINK_TASK0 3 /* Priority of

Blink task 0 */

#define PRIORITY_BLINK_TASK1 4 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK2 2 /* Priority of

Blink task 1 */

#define PRIORITY_BLINK_TASK3 5

#define SIZE_BLINK_TASK0 100 /* Stack size of

Blink task 0 */

#define SIZE_BLINK_TASK1 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK2 100 /* Stack size of

Blink task 1 */

#define SIZE_BLINK_TASK3 100

OS_STK stkBlink0[SIZE_BLINK_TASK0]; /* Stack of

Blink task 0 */

OS_STK stkBlink1[SIZE_BLINK_TASK1]; /* Stack of Blink

task 0 */

OS_STK stkBlink2[SIZE_BLINK_TASK2]; /* Stack of Blink

task 0 */

OS_STK stkBlink3[SIZE_BLINK_TASK3]; /* Stack of Blink

task 0 */

void taskCLock(void *param);

void taskBlink1(void *param);

void display();

void HandleKey();

static union KeyArrays keyArray;

static struct Time time;

static unsigned char currentTimeMs =0;

int main(void)

{

/* Enable GPIO block clock */

SYSCON_AHBPeriphClockCmd(SYSCON_AHBPeriph_G

PIO, ENABLE);

CoInitOS();

CoCreateTask( taskCLock,

(void *)0,

PRIORITY_BLINK_TASK0,

&stkBlink0[SIZE_BLINK_TASK0-1],

SIZE_BLINK_TASK0 ); CoCreateTask( taskBlink1,

(void *)0,

PRIORITY_BLINK_TASK1,

&stkBlink1[SIZE_BLINK_TASK1-1],

SIZE_BLINK_TASK1 ); CoCreateTask(display,

(void*)0,

PRIORITY_BLINK_TASK2,

&stkBlink2[SIZE_BLINK_TASK2-1],

SIZE_BLINK_TASK2 );

CoStartOS();

while(1);

}

void adjustShowPos(volatile char* pPos){

pPos[0]+= 2;

pPos[0] %=4;

}

void updateString( char ch, char* pchar, BOOL show){

if(show){

pchar[0] = ch/10;

pchar[1] = ch%10;

}else {

pchar[0] = 11;//black

pchar[1] = 11;//black

}

}

void updataTime(struct Time* pTime){

pTime->seconds ++;

if(pTime->seconds>= 60){

pTime->seconds -= 60;

pTime->min ++;

if(pTime->min >=60){

pTime->min -= 60;

pTime->hour ++;

pTime->hour %= 24;

//updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

}

//updateString(pTime->min,pTime->ts.TMS.min,TRUE);

}

updateString(pTime->hour,pTime->ts.TMS.hour,TRUE);

updateString(pTime->min,pTime->ts.TMS.min,TRUE);

updateString(pTime->seconds, pTime->ts.TMS.sec,TRUE);

pTime->blink.tida = !pTime->blink.tida;

}

void display(){

#define LE_1 LPC_GPIO0->DA TA|=(1<<3)

//74LS573

#define LE_0 LPC_GPIO0->DA TA&=~(1<<3)

//74LS573

#define LED0_ON LPC_GPIO0->DATA&=~(1<<11)

#define LED0_OFF LPC_GPIO0->DATA|=(1<<11)

#define LED1_ON LPC_GPIO2->DATA&=~(1<<11)

#define LED1_OFF LPC_GPIO2->DATA|=(1<<11)

#define LED2_ON LPC_GPIO3->DATA&=~(1<<4)

#define LED2_OFF LPC_GPIO3->DATA|=(1<<4)

#define LED3_ON LPC_GPIO3->DATA&=~(1<<5)

#define LED3_OFF LPC_GPIO3->DATA|=(1<<5)

const uint8_t

table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x0 };

LPC_IOCON->JTAG_TDI_PIO0_11 |= 0x01; //set to

IO

LPC_GPIO0->DIR|=((1<<3)|(1<<11)|(1<<2));

LPC_GPIO2->DIR|= 0xff +(1<<11);//0x0000Fff;

LPC_GPIO3->DIR=0xff;

LE_1;

time.showPos =2;

initKeys(&keyArray);

while(1){

int i;

for(i=0;i<4;i++){

LED0_OFF;

LED1_OFF;

LED2_OFF;

LED3_OFF;

{

char pos = i + time.showPos;

char ch = table[time.ts.str[pos]];

if(pos ==3 && time.blink.tida) {

ch += 0x80;

}

LPC_GPIO2->DA TA = ~ ch;

}

switch(i){

case 0:

LED0_ON;

break;

case 1:

LED1_ON;

break;

case 2:

LED2_ON;

break;

case 3:

LED3_ON;

break;

}

CoTickDelay(1);

currentTimeMs ++;

}

}

}

void taskCLock(void *param)

{

time.hour =12;

time.min =34;

time.seconds = 56;

{

int i;

for(i=0;i<6;i++) time.ts.str[i]= 0; }

BOOL showLED = TRUE;

for(;;){

switch(time.showMode.sm ){

case ShowNormal:

updataTime(&time);

break;

case ShowAdjustSec:

time.showPos = 2;

updateString(time.seconds,time.ts.TMS.sec,showLED);

break;

case ShowAdjudtMin:

updateString(time.min,time.ts.TMS.min,showLED);

break;

case ShowAdjustHour:

time.showPos =0;

updateString(time.hour,time.ts.TMS.hour,showLED);

break;

}

showLED = !showLED;

//time.blink.tida = !time.blink.tida;

CoTickDelay(1000);

//showLED = !showLED;

//time.blink.tida = !time.blink.tida;

//CoTickDelay(50);

}

}

void taskBlink1(void *param)

{

LPC_IOCON->JTAG_TDO_PIO1_1 =1;

LPC_IOCON->JTAG_TMS_PIO1_0 =1;

LPC_IOCON->JTAG_nTRST_PIO1_2 =1;

LPC_GPIO1->DIR |= (1<<0)+(1<<1)+(1<<2);

while(1){

int i;

for(i=0;i<3;i++){

unsigned int ch = ~(1<

LPC_GPIO1->MASKED_ACCESS[(1<<0) +

(1<<1) + (1<<2)] = ch;

CoTickDelay(100);

}

}

}

void initKeys(KeyHandle keyHandle){

LPC_GPIO1->DIR|=((1<<5)|(1<<8));

LPC_GPIO1->MASKED_ACCESS[(1<<8) + (1<<5)]

= 0; //P1.8 L

LPC_GPIO2->DIR&=~((1<<8)|(1<<9));

LPC_GPIO1->DIR&=~(1<<10);

LPC_GPIO1->IS = 0;

LPC_GPIO1->IBE = 0;

LPC_GPIO1->IEV = 1<<10;

LPC_GPIO1->IE = 1<<10;

LPC_GPIO2->IS =0;

LPC_GPIO2->IBE = 0;

LPC_GPIO2->IEV = (1<<8) +(1<<9);

LPC_GPIO2->IE = (1<<8) +(1<<9);

keyHandle->twoKey.keyNew.key = KEY_UNDIFIFY;

keyHandle->twoKey.keyOLd.key = KEY_UNDIFIFY;

NVIC_EnableIRQ(EINT1_IRQn);

NVIC_EnableIRQ(EINT2_IRQn);

}

void addKey(KeyHandle keyHandle,enum Key ks){

keyHandle->twoKey.keyOLd =

keyHandle->twoKey.keyNew;

keyHandle->twoKey.keyNew.key = ks;

keyHandle->twoKey.keyNew.PressTime = currentTimeMs;

}

BOOL isAKeyPressed(KeyHandle keyHandle,enum Key* pkey){

if(keyHandle->twoKey.keyNew.key == keyHandle->twoKey.keyOLd.key &&

keyHandle->twoKey.keyNew.PressTime - keyHandle->twoKey.keyOLd.PressTime < 20

) return FALSE;

*pkey = keyHandle->twoKey.keyNew.key;

return TRUE;

}

void PIOINT1_IRQHandler(void){

addKey( &keyArray,KEY_ADJUST);

enum Key key;

if(isAKeyPressed(&keyArray,&key)){

time.showMode.smChar ++;

time.showMode.smChar %= 4;

if(time.showMode.sm == ShowNormal){

time.showPos = 2;

}

}

//

LPC_GPIO1->IC = 1<<10;

}

void PIOINT2_IRQHandler(void){

if(LPC_GPIO2->MIS == 1<<8){

addKey( &keyArray,KEY_UP);

}else if(LPC_GPIO2->MIS == 1<<9){

addKey( &keyArray,KEY_DOWN);

}

enum Key key;

if(isAKeyPressed(&keyArray,&key)){

if(key == KEY_UP){

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds++;

if(time.seconds >=60) time.seconds -=

60;

break;

case ShowAdjudtMin:

time.min++;

if(time.min >=60) time.min -= 60;

break;

case ShowAdjustHour:

time.hour ++;

if(time.hour >= 24) time.hour -= 24;

break;

}

}else if(key == KEY_DOWN){

switch(time.showMode.sm){

case ShowNormal:

adjustShowPos(&time.showPos);

break;

case ShowAdjustSec:

time.seconds--;

if(time.seconds<0) time.seconds =59;

break;

case ShowAdjudtMin:

time.min--;

if(time.min < 0 ) time.min = 59;

break;

case ShowAdjustHour:

time.hour--;

if(time.hour < 0) time.hour = 23;

break;

}

}

}

//

LPC_GPIO2->IC = (1<<8) +(1<<9);

}

流水灯C语言程序

/************************************************************** 51单片机流水灯C语言源程序 文件说明:流水灯C程序 程序说明:MCU采用AT89S51,外接11.0592M晶振,P2口输出 *************************************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P2=~temp; delay(100); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++) //8个流水灯反向逐个闪动 { P2=~temp; delay(100); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P2=temp; delay(100); //调用延时函数 temp<<=1; } temp=0x7F;

for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 { P2=temp; delay(100); //调用延时函数 temp>>=1; } } } void delay(uint t) //定义延时函数 { register uint bt; for(;t;t--) for(bt=0;bt<255;bt++); }

流水灯小程序

流水灯小程序 #include void delay() //延时函数,这里延时100ms { int i,j; for(i=0;i<100;i++) { for(j=0;j<2242;j++){} //j循环一次大概1ms } } void main() { //这里看LED原理图LPC_IOCON->JTAG_TMS_PIO1_0=0x01;//定义p1.0引脚为输出 LPC_IOCON->JTAG_TDO_PIO1_1=0x01;//定义p1.1引脚为输出 LPC_IOCON->JTAG_nTRST_PIO1_2=0x01;//定义p1.2引脚为输出 //p1.9引脚默认为输出,不用写 LPC_GPIO1->DIR=(1<<0)+(1<<1)+(1<<2)+(1<<9); LPC_GPIO1->DA TA=(1<<0)|(1<<1)|(1<<2)|(1<<9); //D1、D2、D3、D4灯全灭 while(1) { LPC_GPIO1->DA TA&=~(1<<0);//D1灯亮 delay(); //调用延时函数 LPC_GPIO1->DA TA|=(1<<0);//D1灯灭 delay(); LPC_GPIO1->DA TA&=~(1<<1);//D2灯亮 delay(); LPC_GPIO1->DA TA|=(1<<1);//D2灯灭 delay(); LPC_GPIO1->DA TA&=~(1<<2);//D3灯亮 delay(); LPC_GPIO1->DA TA|=(1<<2);//D3灯灭 delay(); LPC_GPIO1->DA TA&=~(1<<9);//D4灯亮 delay(); LPC_GPIO1->DA TA|=(1<<9);//D4灯灭 delay(); } } 显示1234 # include int main(void) { const int table[4]={0x06,0x5b,0x4f,0x66,};//定义一个数组 LPC_IOCON->JTAG_TDI_PIO0_11=0x01;//定义p1.1为输出 //LPC_IOCON->PIO3_4=0x01; //默认为输出 //LPC_IOCON->PIO3_5=0x01; //默认为输出 LPC_GPIO3->DIR|=(1<<4)|(1<<5);//P3.4与P3.5输出 LPC_GPIO0->DIR|=(1<<3)|(1<<11); //定义P0.3与P0.11为输 出 LPC_GPIO2->DIR|=0XFF+(1<<11); //定义P2.0~P2.7和 P2.11为输出 //这是将四个数码管的引脚都设置为输出 LPC_GPIO2->DA TA|=0xff; //定义P2.0~P2.7输出高电平 LPC_GPIO0->DA TA|=1<<3; //定义P0.3输出为高电平 LPC_GPIO2->DA TA|=(1<<11); //定义P2.11输出高电平 LPC_GPIO3->DA TA|=(1<<4); //定义P3.4输出高电平 LPC_GPIO3->DA TA|=(1<<5); //定义P3.5输出高电平 while(1) { LPC_GPIO0->DA TA&=~(1<<11); //定义P0.11输出 低电平,导通 LPC_GPIO2->DA TA&=~table[0];//调用一个数组,因为为 公共用到的引脚,所以要设置它为一开一关的形式 LPC_GPIO0->DA TA|=(1<<11); //定义P0.11输出高电 平,息灭 LPC_GPIO2->DA TA|=0xff; //定义P2.0~2.7输出高电 平,截止 LPC_GPIO2->DA TA&=~(1<<11); LPC_GPIO2->DA TA&=~table[1]; LPC_GPIO2->DA TA|=(1<<11); LPC_GPIO2->DA TA|=0xff; LPC_GPIO3->DA TA&=~(1<<4); LPC_GPIO2->DA TA&=~table[2]; LPC_GPIO3->DA TA|=(1<<4); LPC_GPIO2->DA TA|=0xff; LPC_GPIO3->DA TA&=~(1<<5); LPC_GPIO2->DA TA&=~table[3]; LPC_GPIO3->DA TA|=(1<<5); LPC_GPIO2->DA TA|=0xff; } }

流水灯实验

班级学号姓名同组人 实验日期室温大气压成绩 流水灯改进 一、实验目的 1、熟悉和掌握ADS集成开发环境及EasyJTAG仿真器的使用; 2、掌握流水灯实验程序的内容; 3、掌握EasyARM72131开发板的具体结构和器件的分布; 4、掌握对原程序进行一定的修改,达到熟练掌握程序编写的目的。 二、实验原理 GPIO概述 LPC2131具有多达47个通用I/O口,分别为P0[31:0]、P1[31:16],其中,P0.24未用,P0.31仅为输出口。由于口线与其他功能复用,因而需要进行相关的管脚连接模块(PINSEL0、PINSEL1、PINSEL2)选择连接GPIO,然后通过IODIR进行输入、输出属性设置后才能操作。 当管脚选择GPIO功能时,有3个寄存器用于控制GPIO的使用,IOSET、IOCLR和IOPTN。IOSET用于口线置1,而IOCLR则用于口线清零,IOPIN则反映当前IO口的状态,读回IOSET则反映当前

IO口设定状态。 特性 ●单个位的方向控制; ●单独控制输出的置位和清零; ●所有I/O口在复位后默认为输入。 EasyARM72131开发板上的8路LED(LED8~LED1)分别可选择P1[25:18]进行控制,电路如图4.12所示。 当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。流水灯显示花样可以通过数组人为定义,也可以通过一定的算法计算。程序清单一所示为采用人为定义

数组控制显示花样的实验程序,流程图如图1所示。 (图1) 三、实验器材 装有ADS的电脑一台、EasyARM2131开发板。 四、实验内容及步骤 1、连接EasyARM2131开发板与电脑之间的连接线,检查是否接好(power显示灯会亮);

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

花样流水灯实验报告

黄淮学院信息工程学院 单片机原理及应用课程设计性实验报告

五、硬件电路设计 根据设计任务,首先进行系统硬件的设计。其硬件原理图由LED显示电路和单片机最小系统组成,如图所示,其中包括时钟电路采用部时钟方式,复位电路采用上电自动复位。由于单片机的I/O口的高电平驱动能力只有微安级,而灌电流可以达到3毫安以上,因此采用低电平驱动。P1、P2、P3分别控制8个led灯。 六、软件程序设计 1、软件设计思路 如果通过上图所示电路图完成实验要求,通过数组,分别同时控P0、P1、P2分别控制8个led灯,从而协调控制24个灯实现花样流水灯效果。 开始 编写数组 主循环 逐个点亮 24灯同时闪烁 逐个熄灭

P3=table1[i]; delayms(500); } shan();//全部闪烁 for(i=0;i<8;i++)//逐个熄灭{ P3=table2[i]; delayms(500); } for(i=0;i<8;i++) { P1=table3[i]; delayms(500); } for(i=0;i<8;i++) { P0=table2[i]; delayms(500); } } } void delayms (uintt) { uint x,y; for(x=t; x>0;x--) for(y=50;y>0;y--); } 七、软硬件仿真调试分析 1、仿真调试结果

图片 1 逐个点亮图片 2 24灯闪烁 图片 3 逐个熄灭 2、性能测试及结果分析 通过仿真结果发现通过上述系统可以实现实验要求,24个灯逐个点亮,24个灯全亮后,24个灯一起闪烁,闪烁5次后,然后24个灯逐个熄灭。由此证明系统满足实验要求。 八、项目总结 在本次花样流水灯试验中,使用循环程序、数组语句实现了实验要求,设计过程中遇到了很多的问题,但经过努力,最终设计出了合理的解决方案。通过此次实验,对多个led灯的控制能力进一步得到提升。 九、项目设计报告成绩 实验报告成绩: 指导教师签字: 年月日

单片机花样流水灯设计实验报告

**大学 物理学院 单片机花样流水灯设计实验 课题:花样流水灯设计 班级: 物理 *** 姓名: *** 学号: ……………

当今时代的智能控制电子技术,给人们的生活带来了方便和舒适,而每到晚上五颜六色的霓虹灯则把我们的城市点缀得格外迷人,为人们生活增添了不少色彩。 制作流水灯的方法有很多种,有传统的分立元件,由数字逻辑电路构成的控制系统和单片机智能控制系统等。本设计介绍一种简单实用的单片机花样流水灯设计与制作,采用基于MS-51的单片机AT89C51和发光二极管、晶振、复位、电源等电路以及必要的软件组成的以AT89C51为核心,辅以简单的数码管等设备和必要的电路,设计了一款简易的流水灯电路板,并编写简单的程序,使其能够自动工作。 本设计用AT89C51单片机为核心自制一款简易的花样流水灯,并介绍了其软件编程仿真及电路焊接实现,在实践中体验单片机的自动控制功能。该设计具有实际意义,可以在广告业、媒体宣传、装饰业等领域得到广泛应用。 关键字:AT89C51 单片机流水灯数码管

1. 单片机及其发展概况 单片机又称为单片微计算机,其特点是将微型计算机的基本功能部件(如中央处理器(CPU)、存储器、输入接口、输出接口、定时/计数器及终端系统等)全部集成在一个半导体芯片上。单片机作为一种高集成度微型计算机,已经广泛应用于工业自动化控制、智能仪器仪表、通信设备、汽车电子与航空航天电子系统、智能家居电器等各个领域。 2. Protues仿真软件简介 Protues以其数量众多的元件数据库、标准化的仿真仪器、直观的捕获界面、简洁明了的操作、强大的分析测试、可信的测试结果, 为电子工程设计节约研发时间,节省了工程设计费用。利用Protues软件设计一款通过数码管显示计数时间的流水灯电路及Keil C软件编程后,再将两者关联则可以简单快速的进行仿真。 【实验设计目标】 设计要求以发光二极管作为发光器件,用单片机自动控制,对8个LED 灯设计至少3种流水灯显示方式,每隔20秒变换一次显示花样,计时通过一个二位七段数码管显示。

流水灯控制实验报告及程序

实验三流水灯控制实验 姓名专业通信工程学号成绩 一、实验目的 1.掌握Keil C51 软件与protues软件联合仿真调试的方法; 2.掌握如何使用程序与查表等方法实现流水效果; 3.掌握按键去抖原理及处理方法。 二、实验仪器与设备 1. 微机1台 2. Keil C51集成开发环境 3. Proteus仿真软件 三、实验内容 1.用Proteus设计一流水灯控制电路。利用P1口控制8个发光二级管L1—L8。P3.3口接一按 键K1。参考电路如下图所示。其中74LS240为八反响三态缓冲器/线驱动器。 2.用中断或查询方式编写程序,每按动一次K1键,演示不同的流水效果。若用KEY表示按键的 次数,则其对应的流水效果如下: ① KEY=0: L1-L8全亮; ② KEY=1: L1-L8先全灭,然后自右向左单管点亮,如此循环; ③ KEY=2: L1-L8先全灭,然后自右向左依次点亮,如此循环; ④ KEY=3: L1-L8先全亮,然后自左向右依次熄灭,如此循环; ⑤ KEY=4: L1-L8先全灭,然后整体闪烁,如此循环; ⑥ KEY=5:自行设计效果。 以上移位及闪烁时间间隔均设置为0.3秒,按动5次按键后,再按键时,流水效果从头开始循环。 四、实验原理 1.按键去抖原理:通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号 波形如下图所示。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5~10ms。按键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除按键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。常用软件方法去抖动,即检测到按键闭合后执行一个5~10ms延时程序;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有按键按下。当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后,才能转入该键的处理程序。 2.74LS240:八反相三态缓冲器/线驱动器 引脚排列图:

用单片机控制的LED流水灯设计(电路、程序全部给出)

1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATM EL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz 工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图1所示。 图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。那个单片机究竟有什么 功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^) 我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机 上接上最少的外围电路元件让单片机工作。一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。 #include //头文件定义。或用#include其具体的区别在于:后者定义了更多的地址空间。 //在Keil安装文件夹中,找到相应的文件,比较一下便知! sbit P1_0 = P1 ^ 0; //定义管脚 void main (void) { while(1) { P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效 } } 就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。因为我们把LED的正通过电阻接至VCC。 P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。那么这样就能达到了我们预先的要求了。 while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。如果我们要试着点亮其他的LED,也类似上述语句。这里就不再讲了。 点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其 实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。假设我们有8个LED分别接在P1口的8个引脚上。硬件连接,在 P1_1--P1_7上再接7个LED即可。例程如下: #include sbit P1_0 = P1 ^ 0; sbit P1_1 = P1 ^ 1; sbit P1_2 = P1 ^ 2; sbit P1_3 = P1 ^ 3; sbit P1_4 = P1 ^ 4; sbit P1_5 = P1 ^ 5; sbit P1_6 = P1 ^ 6; sbit P1_7 = P1 ^ 7; void Delay(unsigned char a) { unsigned char i; while( --a != 0) {

单片机流水灯所有程序

单片机流水灯所有程序 SANY GROUP system office room 【SANYUA16H-SANYHUASANYUA8Q8-

#include #define uchar unsigned char //char是字符数组 #define unit unsigned int uchar num; sbit led1=P1^0; void main() { TMOD=0x01; // 打开工作方式寄存器,选择工作方式1(0000 0001) TH0=(65536-45872)/256; TL0=(65536-45872)%6; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1); //程序停止在这里等待中断发生 } void T0_time()interrupt 1 { TH1=(65536-45872)/256; //装初值50ms TL1=(65536-45872)%6; num ; //num每加一次判断是否到了20次 if(num==20) // 20*50ms=1000ms=1s,间隔1s { num=0; //然后把num清0重新再计20次 led1=~led1; //让发光管状态取反 } } 用定时器使1灯间隔1s闪烁 #include #define uchar unsigned char #define unit unsigned int unit num ; #define ucha unsigned char #define uni unsigned int uni a ; uchar table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; //????

单片机流水灯多种程序方法

一、傻瓜式编程 #include<> #define uint unsigned int #define uchar unsigned char void delay(uint z); //延时子函数的声明main () { P0=0xfe;//第一个灯亮 delay(500); P0=0xfd;//第二个灯亮 delay(500); P0=0xfb; delay(500); P0=0xf7; delay(500); P0=0xef; delay(500); P0=0xdf; delay(500); P0=0xbf; delay(500); P0=0x7f; delay(500); } void delay(uint z) //延时子函数 { uint x,y; for(x=0;x

二、用移位符号“<<”或“>>” void main() //主函数 { a=0xfe; //给a赋值 while(1) { P0=a; //给P0口赋值,第一个等亮 a为1111 1110 a=~a; //求反 a为0000 0001 a=a<<1;//移位 a为0000 0010 a=~a; //求反还原a。第二个灯亮 a为1111 1101 delay(500); if(a==0x7f) { P0=0x7f;//第八个灯亮一次 delay(500); a=0xfe;//让第一个灯亮,然后无限循环 } } } 三、用移位函数_crol_( )和_cror_( ) main() { a=0xfe; while(1) { P0=a; delay(500); a=_crol_(a,1); //a每次左移一位 } } 四、使用数组 uchar code table[ ]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf,0x7f}; main() { whlie(1) { for(a=0;a<8;a++) { P0=table[a]; delay(500); } } }

用单片机控制的LED流水灯设计(电路、程序全部给出)讲课教案

用单片机控制的L E D 流水灯设计(电路、程序全部给出)

1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文笔者用AT89C51单片机自制了一款简易的流水灯,重点介绍了其软件编程方法,以期给单片机初学者以启发,更快地成为单片机领域的优秀人才。 2.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATM EL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。其具体硬件组成如图1所示。 图1 流水灯硬件原理图 从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,

单片机流水灯实验报告

单片机流水灯实验报告 电子信息工程学系实验报告 课程名称:单片机原理及接口 实验项目名称:实验2 流水灯实验时间: xx-10-21 班级:电信092 姓名:蔡松亮学号: 910706247 一、实验目的: 进一步熟悉keil仿真软件、proteus仿真软件的使用。了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。掌握C51中单片机I/O口的编程方法和使用I/O口进行输入输出的注意事项。 二、实验原理: MCS-51系列单片机有四组8位并行I/O口,记作P0、P1、P2和P3。每组I/O口内部都有8位数据输入缓冲器、8位数据输出锁存器及数据输出驱动等电路。四组并行I/O端口即可以按字节操作,又可以按位操作。当系统没有扩展外部器件时,I/O端口用作双向输入输

出口;当系统作外部扩展时,使用P0、P2口作系统地址和数据总线、P3口有第二功能,与MCS-51的内部功能器件配合使用。 以P1口为例,内部结构如下图所示: 图 P1口的位结构 作输出时:输出0时,将0输出到内部总线上,在写锁存器信号控制下写入锁存器,锁存器的反向输出端输出1,下面的场效应管导通,输出引脚成低电平。输出1时,下面的场效应管截止,上面的上拉电阻使输出为1。作输入时:P1端口引脚信号通过一个输入三态缓冲器接入内部总线,再读引脚信号控制下,引脚电平出现在内部总线上。 I/O口的注意事项,如果单片机内部有程序存贮器,不需要扩展外部存贮器和I/O接口,单片机的四个口均可作I/O口使用;四个口在作输入口使用时,均应先对其写“1”,以避免误读;P0口作I/O 口使 用时应外接10K的上拉电阻,其它口则可不必;P2可某几根线作地址使用时,剩下的线不能作I/O口线使用;P3口的某些口线作第二功能时,剩下的口线可以单独作I/O口线使用。

最新五种编程方式实现流水灯的单片机c程序讲课教案

五种编程方式实现流水灯的单片机C程序 //功能:采用顺序结构实现的流水灯控制程序 /*此方式中采用的是字操作(也称为总线操作)*/ #include void delay(unsigned char i); //延时函数声明 void main() //主函数 { while(1) { P1 = 0xfe; //点亮第1个发光二极管,0.000389s delay(200); //延时 P1 = 0xfd; //点亮第2个发光二极管,0.155403s,0.1558 delay(200); //延时 P1 = 0xfb; //点亮第3个发光二极管 delay(200); //延时 P1 = 0xf7; //点亮第4个发光二极管 delay(200); //延时 P1 = 0xef; //点亮第5个发光二极管 delay(200); //延时 P1 = 0xdf; //点亮第6个发光二极管 delay(200); //延时 P1 = 0xbf; //点亮第7个发光二极管 delay(200); //延时 P1 = 0x7f; //点亮第8个发光二极管 delay(200); //延时 } } //函数名:delay //函数功能:实现软件延时 //形式参数:unsigned char i; // i控制空循环的外循环次数,共循环i*255次 //返回值:无 void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{ unsigned char j, k; //定义无符号字符型变量j和k for(k = 0; k < i; k++) //双重for循环语句实现软件延时 for(j = 0; j < 255; j++); } //功能:采用循环结构实现的流水灯控制程序 //此方式中采用的移位,按位取反等操作是位操作 #include //包含头文件REG51.H void delay(unsigned char i); //延时函数声明 void main() //主函数

51单片机经典流水灯汇编程序

单片机流水灯汇编程序设计 流水灯汇编程序 8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms PUSH PSW ;现场保护指令(有时可以不加) MOV R4,#2 L3: MOV R2 ,#00H L1: MOV R3 ,#00H L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END

51单片机汇编程序集(二) 2008年12月12日星期五 10:27 辛普生积分程序 内部RAM数据排序程序(升序) 外部RAM数据排序程序(升序) 外部RAM浮点数排序程序(升序) BCD小数转换为二进制小数(2位) BCD小数转换为二进制小数(N位) BCD整数转换为二进制整数(1位) BCD整数转换为二进制整数(2位) BCD整数转换为二进制整数(3位) BCD整数转换为二进制整数(N位) 二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码) 二进制整数(M位)转换为十进制整数(组合BCD码) 三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4 ;占用资源: ACC,R2,NDIV31 ;堆栈需求: 5字节 ;出口: R0,NCNT IBTD21 : MOV NCNT,#00H MOV R2,#00H IBD211 : MOV R7,#0AH LCALL NDIV31 MOV A,R7 MOV @R0,A INC R0 INC NCNT MOV A,R3 ORL A,R4 JNZ IBD211 MOV A,R0 CLR C SUBB A,NCNT MOV R0,A RET ;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4 ;占用资源: ACC,B,R7 ;堆栈需求: 3字节 ;出口: R0

51单片机 流水灯 ~ 花样灯 程序

单片机为89c52 晶振为11.0592, /***此程序为流水灯*** / #include #include #define uchar unsigned char //宏定义 #define uint unsigned int uchar led; void delay(uint z) //延时子函数体 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { led=0xfe; //赋初值 while(1) { P1=led; //点亮第一个小灯 delay(100); //延时100毫秒 led=_crol_(led,1); 将led的变量左移给下一位} }

/*8个发光管间隔200ms由上至下,返回再由上至下,一个个往下亮,后全亮由下至上,返回再由下至上,一个个往下亮,后全亮 再重复2次, 然后全部熄灭再以500ms间隔 全部闪烁3次。重复此过程*/ #include #include #define uchar unsigned char #define uint unsigned int uchar led; uint i,j; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { while(1) { for(j=0;j<2;j++) { led=0xfe; //赋初值 for(i=0;i<8;i++) { P1=led; //点亮第一个小灯 delay(200); //延时200毫秒 led=_crol_(led,1); //将led变量循环左移给下一位 } led=0xfe; //赋初值 for(i=0;i<8;i++) { P1=led; //点亮第一个小灯 delay(200); //延时200毫秒 led<<=1; //左移给下一位 } led=0x7f; //赋初值

51单片机流水灯实验报告-单片机实验报告流水灯

51单片机流水灯试验 一、实验目的 1.了解51单片机的引脚结构。 2.根据所学汇编语言编写代码实现LED灯的流水功能。 3.利用开发板下载hex文件后验证功能。 二、实验器材 个人电脑,80c51单片机,开发板 三、实验原理 单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。 A寄存器的位经过rr a之后转换如下所示: 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。

四、实验电路图 五、通过仿真实验正确性

代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1

DJNZ R1,DEL2 RET End 实验结果: 六、实验参考程序 #include #define uchar unsigned char #define uint unsigned int uchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

sbit P00=P0^0; sbit P01=P0^1; void delay(uchar t) { uchar i,j; for(i=0;i

单片机流水灯C语言源程序

单片机流水灯C语言源程序 标题:51单片机流水灯C语言源程序2008-12-06 08:43:05 ************************************************************** 文件名称:flash_led.c 文件说明:流水灯C程序 编写日期:2006年10月5日 程序说明:MCU采用AT89S51,外接12M晶振,P1口输出 *************************************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++) //8个流水灯反向逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(100); //调用延时函数 temp<<=1; }

花样流水灯设计

一、原理图设计的目的: 利用AT89C51,通过控制按键来实现六种流水灯花样的转换,实现花样流水灯的设计,同时通过外部中断0,来控制流水灯的速度。 二、各器件的功能作用: 1、AT89C51 AT89C51有40个引脚,每个引脚都有其功能。本次设计中,利用P0口当输出口,输出低电平来驱动发光二极管点亮。利用P1.0~P1.5六个引脚,通过按键接地,然后采用扫描的方式,判断哪个引脚所接按键按下,从而来控制六种流水灯的花样。利用P3.2引脚外接按键接地,通过控制按键来减慢流水灯的速度,利用P3.3引脚外接按键接地,通过控制按键来提高流水灯的速度。利用P3.7输出低电平,导通三极管Q1,从而给八个发光二极管的阳极加高电平,一旦P0口输出低电平就可以驱动发光二极管。 2、八个发光二极管: 通过八个发光二极管来实现流水灯的变化,用低电平驱动发光二级管亮,同时,用高电平使其熄灭 。 3、按键

通过P1.0-P1.5外接的按键来实现流水灯各种花样的变化,当按键按下时,驱动一种流水灯花样的闪烁。同时,利用按键来提供外部中断,当按下按键时,产生一个外部中断,向CPU申请中断,CPU 响应其中断,因此可以用按键来实现提高流水灯闪烁的速度。 通过在RST口处加上一个按钮手动复位电路,利用复位按钮可以使运行中的流水灯复位到初始的状态。 4、排阻 因为P0口作为输出口时需要外接上拉电阻 三、设计原理图:

四、程序如下: #include //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数 void delay(uint);//声明延时函数 void main(void) { uint i; uchar temp; TCON=0x05; IE=0x85; PX1=1; PX0=0; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 {

流水灯实验报告

实验二流水灯 实验时间:2011-11-20 实验地点:物理楼406 一、实验目的 通过此实验进一步了解,熟悉FPGA开发软件的使用方法及Verilog.HDL,的编程方法;学习简单时序电路的设计。 二、实验原理和内容 实验内容:在实验板上实现LED1~LED8发光二极管流水灯显示 实验原理:在LED1~LED8引脚上周期性地输出流水数据,如原来输出的数据是11111100则表示点亮LED1,LED2,流水一次后,输出数据应该为11111000,而此时则应点亮LED1~LED3三个LED发光二极管,这样就可以实现LED流水灯,为了观察方便,流水速率最好在2Hz左右。在QuickSOPC核心板上有-48MHz的标准时钟源,该时钟脉冲CLOCK 与芯片的28脚相连,为了产生2Hz的时钟脉冲,在此调用了一个分频模块int_div模块,通过修改分频系数来改变输出频率,int-div模块是一个占空比为50%的任意整数分频器。 三、实验步骤 1,启动QuartusⅡ建立一个空白工程,然后命名为led-water.qpf。 2,新建Verilog HDL源程序文件ledwater.v,输入程序代码并保存,然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 3,从设计文件创建模块,由ledwater.v生成名为ledwater.bsf的模块符号文件。 4,将光盘中EDA-Component目录下的int-div.bsf和int-div.v拷贝到工程目录。 5,新建图形设计文件命名为led-water.bdf并保存。在空白处双击鼠标左键,在Symbol对话框左上角的libraries.v中,分别将project下的ledwater和int-div模块放在图形文件led-water.bdf中,加入输入,输出引脚,双击各引脚符号进行引脚命名。将与ledwater模块led[7..0]连接的引脚命名为led[7..0],与int-div模块clock连接的引脚命名为clock,int-div模块的clk-out与ledwater模块的clk相连接。 6,选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司Cyclone系列的EPIC12Q240C8芯片,引脚锁定方法见下表,将未使用的引脚设置为三态输入。

相关主题
文本预览
相关文档 最新文档