⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 可调时钟zzh.c

📁 ARM可调时钟的程序
💻 C
字号:
#include <LPC213X.H>

#define  KEY_STATE  1<<16
#define  KEY_ADJUST 1<<17
#define  OFF        10

const unsigned char LEDMAP[] =
{
    0x3f, 0x06, 0x5b, 0x4f, 0x66, 
    0x6d, 0x7d, 0x07, 0x7f, 0x6f,0x00
};

unsigned char LEDBuf[6]; 
unsigned char sec;
unsigned char min;
unsigned char hour;
unsigned char state;

delay1ms()
{
    unsigned char i;
    for(i = 250; i > 0; i--); 
    for(i = 247; i > 0; i--);
}
display()
{
    unsigned char i;
    unsigned char outbit;
    outbit = 0x01;  // 从右边开始显示
    for (i = 0; i < 6; i++)
    {
        // 关所有LED(共阴极)		
        IO0SET = 0x3f << 8;
        // 送数据  
        IO0SET = LEDMAP[LEDBuf[i]];
        IO0CLR = ~LEDMAP[LEDBuf[i]]; 
        IO0SET = (~outbit) << 8;
        IO0CLR = outbit << 8; 		
        delay1ms();
        outbit <<= 1;     // 显示下一位
    }
}

showNormal()
{
	unsigned char i;
	LEDBuf[0] = sec%10;
    LEDBuf[1] = sec/10;
    LEDBuf[2] = min%10;
    LEDBuf[3] = min/10;
    LEDBuf[4] = hour%10;
    LEDBuf[5] = hour/10;
    sec++;		
    if(60 == sec)
	{
        sec = 0;
        min ++;	
        if(60 == min)
		{
        	min = 0;
            hour ++;	
            if(24 == hour)
    		{
                hour = 0;			
    		}
		}
	}
    for(i = 250; i > 0; i--)
    {
        display();
		if(!(IO1PIN & KEY_STATE))
		  {
			while(!(IO1PIN & KEY_STATE))
			{
				display();
			}
			state=1;
		  }
    }		
}

showAdjustSec()
{
	LEDBuf[2] = OFF;
    LEDBuf[3] = OFF;
    LEDBuf[4] = OFF;
    LEDBuf[5] = OFF;
	display();
	if(!(IO1PIN & KEY_ADJUST))
	{
		while(!(IO1PIN & KEY_ADJUST))
		{
			if(60==sec)
			{
			 	sec=0;
			}
			LEDBuf[0] = sec%10;
		    LEDBuf[1] = sec/10;
		    display(); 
		}
		sec++;
	} 	
    if(!(IO1PIN & KEY_STATE))
	{
		while(!(IO1PIN & KEY_STATE))
		{
			display();
		}
		state=2;
		sec--;
	}
}

showAdjustMin()
{
	LEDBuf[0] = OFF;
	LEDBuf[1] = OFF;
	LEDBuf[2] = min%10;
	LEDBuf[3] = min/10;
	LEDBuf[4] = OFF;
	LEDBuf[5] = OFF;
	display();
	if(!(IO1PIN & KEY_ADJUST))
	{
		while(!(IO1PIN & KEY_ADJUST))
		{
			if(60==min)
			{
			 	min=0;
			}
			LEDBuf[2] = min%10;
		    LEDBuf[3] = min/10;
		    display(); 
		}
		min++;
	} 	
    if(!(IO1PIN & KEY_STATE))
	{
		while(!(IO1PIN & KEY_STATE))
		{
			display();
		}
		state=3;
	}
}

showAdjustHour()
{
	LEDBuf[0] = OFF;
    LEDBuf[1] = OFF;
    LEDBuf[2] = OFF;
    LEDBuf[3] = OFF;
	LEDBuf[4] = hour%10;
	LEDBuf[5] = hour/10;
	display();
	if(!(IO1PIN & KEY_ADJUST))
	{
		while(!(IO1PIN & KEY_ADJUST))
		{
			if(24==hour)
			{
			 	hour=0;
			}
			LEDBuf[4] = hour%10;
		    LEDBuf[5] = hour/10;
			display(); 
		}
		hour++;
	} 	
    if(!(IO1PIN & KEY_STATE))
	{
		while(!(IO1PIN & KEY_STATE))
		{
			display();
		}
		state=4;
	}
}

main()
{
    IO0DIR = 0x00003F7F;
	IO1DIR = 0x00000000; 
    //IRQEnable();
    while(1)
    {
        switch(state)
		{
			case 0:
				showNormal();
				break;
			case 1:
				showAdjustSec();
				break;
			case 2:
				showAdjustMin();
				break;
			case 3:
				showAdjustHour();
				break;
			case 4:
				LEDBuf[0] = sec%10;
			    LEDBuf[1] = sec/10;
			    LEDBuf[2] = min%10;
			    LEDBuf[3] = min/10;
				display();
				if(!(IO1PIN & KEY_STATE))
				{
					while(!(IO1PIN & KEY_STATE))
					{
						display();
					}
					state=0;
				}
				break;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -