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

📄 main.c

📁 数字时钟:LCD+凌阳SPCEO61A,通过中断计时,LCD显示,界面简洁宜人
💻 C
字号:
#include "SPCE061A.h"
#define lcd1602_rs_high  0x0100
#define lcd1602_rs_low  0xfeff
#define lcd1602_rw_high 0x0200
#define lcd1602_rw_low 0xfdff
#define lcd1602_e_high 0x0400
#define lcd1602_e_low 0xfbff
unsigned  char string[]=" Digital Clock";
unsigned char hour=0,minute=0,second=0,clockcount=0;
void main(void)
{   
	__asm("INT OFF");
	*P_INT_Ctrl=C_IRQ5_2Hz;
	*P_IOA_Dir=0xffff;
	*P_IOA_Attrib=0xffff;
	*P_IOA_Data=0xffff;
     initial_lcd1602();
	write_lcd1602_string(0x0081,string);
	displayclock(0x00c4,hour);
	write_lcd1602_data(0x003a);
	displayclock(0x00c7,minute);
	write_lcd1602_data(0x003a);
	displayclock(0x00ca,second);
	__asm("int IRQ");
	while(1)
	{*P_Watchdog_Clear=0x0001;}
 
}
void checkbusy_lcd1602(void)
{
	*P_IOA_Dir=0xff7f;
	*P_IOA_Attrib=0xffff;
	*P_IOA_Data=0xffff;
	*P_IOA_Buffer=*P_IOA_Buffer|0x00ff;
 *P_IOA_Buffer=*P_IOA_Buffer&lcd1602_rs_low;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
	*P_IOA_Buffer=*P_IOA_Buffer|lcd1602_rw_high;
     *P_IOA_Buffer=*P_IOA_Buffer|lcd1602_e_high;	
	 delay(10);	    		
	 while(*P_IOA_Data&0x0080)
	   {
	   	*P_Watchdog_Clear=0x0001;	   	
	   }
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
	*P_IOA_Dir=0xffff;	
}
void write_lcd1602_instruction(unsigned int i)
{
	checkbusy_lcd1602();
	*P_Watchdog_Clear=0x0001;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_rw_low;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_rs_low;
    *P_IOA_Buffer=*P_IOA_Buffer|lcd1602_e_high;	
    *P_IOA_Buffer=(*P_IOA_Buffer&0xff00)|i;
   	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
}
void write_lcd1602_data(unsigned int i)
{
	checkbusy_lcd1602();
	*P_Watchdog_Clear=0x0001;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_rw_low;
	*P_IOA_Buffer=*P_IOA_Buffer|lcd1602_rs_high;
	 *P_IOA_Buffer=*P_IOA_Buffer|lcd1602_e_high;
	*P_IOA_Buffer=(*P_IOA_Buffer&0xff00)|i;
	*P_IOA_Buffer=*P_IOA_Buffer&lcd1602_e_low;
}



void write_lcd1602_string(unsigned int x,unsigned *p)
{
	
	write_lcd1602_instruction(x);
	while(*p!=0x0000)
	{
		*P_Watchdog_Clear=0x0001;
		write_lcd1602_data(*p);
		p++;
		if(x++==0x008f)
		{
			write_lcd1602_instruction(0x00c0);
		}
	}
}

void cls(void)
{
	write_lcd1602_instruction(0x0001);
}
void initial_lcd1602(void)
{
	write_lcd1602_instruction(0x0038);
	delay(100);
	write_lcd1602_instruction(0x000c);
	delay(100);
	write_lcd1602_instruction(0x0006);
	write_lcd1602_instruction(0x0001);
		
}
void delay(unsigned int i)
{
	*P_Watchdog_Clear=0x0001;
	while(i--!=0x0000);
}
void IRQ5(void)__attribute__((ISR));
void IRQ5(void)
{
	if(*P_INT_Ctrl&C_IRQ5_2Hz)
	{
		*P_INT_Clear=C_IRQ5_2Hz;
		clockcount++;
		if (clockcount==1)	
		{
			write_lcd1602_instruction(0x00c6);
	        write_lcd1602_data(0x0020);
	      	write_lcd1602_instruction(0x00c9);
	    	write_lcd1602_data(0x0020);
		}
		if (clockcount==2)
		{
			write_lcd1602_instruction(0x00c6);
	        write_lcd1602_data(0x003a);
	 	    write_lcd1602_instruction(0x00c9);
	    	write_lcd1602_data(0x003a);
			clockcount=0;
			if (second!=59)
			{
				second++;
				displayclock(0x00ca,second);
			}
			else
			{
				second=0;
				displayclock(0x00ca,second);
				if(minute!=59)
				{
					minute++;
					displayclock(0x00c7,minute);
				}
				else
				{
					minute=0;
					displayclock(0x00c7,minute);
					if(hour!=23)
					{
						hour++;
						displayclock(0x00c4,hour);
					}
					else
					{
						hour=0;
						displayclock(0x00c4,hour);
					}
				}
			}
		}
	
	}
	else
	{
		*P_INT_Clear=C_IRQ5_4Hz;
	}
}
void displayclock(unsigned int x,unsigned char y)
{
	write_lcd1602_instruction(x);
	write_lcd1602_data(y/10+48);
	write_lcd1602_data(y%10+48);
}

⌨️ 快捷键说明

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