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

📄 testclk_2.c

📁 STC51单片机做的一个时钟
💻 C
字号:
#include <intrins.h>
#include "STC89LE516AD.h"
#define uchar unsigned char 
#define uint unsigned int



sbit ce = P4^0;
sbit cl = P2^6;
sbit di = P2^7;
sbit P3_3 = P3^3;
sbit P4_3 = P4^3;

bit flag = 0,flag1 = 1,flag2 =0;
uchar buffer[20];
uchar sw,vol;
uchar aa,count = 0,blinking = 0,mm;
uchar second,minute,hour,second_h,second_l,minute_h,minute_l,hour_h,hour_l;
uchar code table5[][3] = {{0xc0,0x40,0x1c},{0xc0,0,0},{0x40,0x44,0x15},{0xc0,0x44,0x05},//0,1,2,3
						 {0xc0,0x04,0x09},{0x80,0x44,0x0d},{0x80,0x44,0x1d},//4,5,6
						 {0xc0,0,0x04},{0xc0,0x44,0x1d},{0xc0,0x44,0x0d},};//7,8,9

uchar code table6[][3] = {{0x80,0x81,0x38},{0x80,0x01,0},{0x80,0x88,0x2a},{0x80,0x89,0x0a},//0,1,2,3
						 {0x80,0x09,0x12},{0,0x89,0x1a},{0,0x89,0x3a},//4,5,6
						 {0x80,0x01,0x08},{0x80,0x89,0x3a},{0x80,0x89,0x1a},};//7,8,9

uchar code table7[][2] = {{0x03,0x71},{0x03,0},{0x11,0x55},{0x13,0x15},//0,1,2,3
					    {0x13,0x24},{0x12,0x35},{0x12,0x75},//4,5,6
					    {0x03,0x10},{0x13,0x75},{0x13,0x35},};//7,8,9
uchar code table8[][2] = {{0x06,0xe2},{0x06,0},{0x22,0xaa},{0x26,0x2a},//0,1,2,3
					    {0x26,0x48},{0x24,0x6a},{0x24,0xea},//4,5,6
					    {0x06,0x20},{0x26,0xea},{0x26,0x6a},};//7,8,9
uchar code table9[][3] = {{0x0c,0xc4,0x01},{0x0c,0,0},{0x44,0x54,0x01},{0x4c,0x54,0},//0,1,2,3
						 {0x4c,0x90,0},{0x48,0xd4,0},{0x48,0xd4,0x01},//4,5,6
						 {0x0c,0x40,0},{0x4c,0xd4,0x01},{0x4c,0xd4,0},};//7,8,9

uchar code table10[][3] = {{0x18,0x88,0x03},{0x18,0,0},{0x88,0xa8,0x02},{0x98,0xa8,0},//0,1,2,3
						 {0x98,0x20,0x01},{0x90,0xa8,0x01},{0x90,0xa8,0x03},//4,5,6
						 {0x18,0x80,0},{0x98,0xa8,0x03},{0x98,0xa8,0x01},};//7,8,9

void clk_display();
void up_key();
void down_key();

void delay(uint z)
{
    uint x,y;
    for(x = 0;x < z;x ++)
	{
        for(y = 0;y < 110;y ++);
    }
}

void clear()
{
	buffer[0] = 0;buffer[1] = 0;buffer[2] = 0;buffer[3] = 0;buffer[4] = 0;
    buffer[5] = 0;buffer[6] = 0;buffer[7] = 0;buffer[8] = 0;buffer[9] = 0;
	buffer[10] = 0;buffer[11] = 0;buffer[12] = 0;buffer[13] = 0;buffer[14] = 0;
    buffer[15] = 0;buffer[16] = 0;buffer[17] = 0;buffer[18] = 0;buffer[19] = 0x10;
}

void lcd_show()
{
	uchar i,j,temp = 0x41;
	ce = 0;
	cl = 0;
	for(i = 0;i < 8;i ++)
	{
		if(temp & 0x01)
			di = 1;
		else
			di = 0;
		
		cl = 1;
		_nop_();
		_nop_();
		_nop_();
		temp = temp >> 1;
		cl = 0;
	}
	ce = 1;
	for(i = 0;i < 20;i ++)
	{
		temp = buffer[i];
		for(j = 0;j < 8;j ++)
		{

			if(temp & 0x01)
				di = 1;
			else
				di = 0;
			
			cl = 1;
			_nop_();
			_nop_();
			_nop_();
			temp = temp >> 1;
			cl = 0;
		}
	}	
}

void keyscan_knob()
{
	uchar temp,temp1;
	if(P3_3 == 0)
	{
		if(P4_3 == 0)
			temp = 0;
		else 
			temp = 1;
	}
	else 
	{
		if(P4_3 == 0)
			temp = 2;
		else 
			temp = 3;
	}
	if(temp != sw)
	{
		delay(1);
		if(P3_3 == 0)
		{
			if(P4_3 == 0)
				temp1 = 0;
			else 
				temp1 = 1;
		}
		else 
		{
			if(P4_3 == 0)
				temp1 = 2;
			else 
				temp1 = 3;
		}
		if(temp == temp1)
		{
			if(temp == 0)
			{
				if(sw == 2)
				{
					up_key();
				}
				else if(sw == 1)
				{
					down_key();
				}	
			}
			else if(temp == 3)
			{
				if(sw == 1)
				{
					up_key();
				}
				else if(sw == 2)
				{
					down_key();
				}			
			}
			sw = temp;
		}

	}

}
void up_key()
{
	if(flag)
	{
		switch(count)
		{
			case 1:
					hour ++;
					if(hour == 24)
						hour = 0;
					clk_display();
					break;
			case 2:
					minute ++;
					if(minute == 60)
						minute = 0;
					clk_display();
					break;
			case 3:
					second ++;
					if(second == 60)
						second = 0;					
					clk_display();
					break;								
		}
	}
}
void down_key()
{
	if(flag)
	{
		switch(count)
		{
			case 1:
					if(hour > 0)
						hour --;
					else
						hour = 23;
					clk_display();
					break;
			case 2:
					if(minute > 0)
						minute --;
					else
						minute = 59;
					clk_display();
					break;
			case 3:
					if(second > 0 )
						second --;
					else
						second = 59;
					clk_display();
					break;								
		}
	}
}
void Get_AD_Result(uchar channel)
{ 
    ADC_DATA = 0;
    ADC_CONTR = channel;    
    delay(1);              
    ADC_CONTR |= 0X08;     
    while((ADC_CONTR & 0x10) == 0);
    ADC_CONTR &= 0XF7;                     
}
void keyscan()
{
	uchar t1;
	uchar t2;
	Get_AD_Result(2);
	t1 = ADC_DATA >> 4;
	delay(10);
	Get_AD_Result(2);
	if(ADC_DATA < 0xd0)
	{
		t2 = ADC_DATA >> 4;
		if(t1 == t2)		
		{
			switch(t1)
			{
				case 0:	
						break;
				case 1:
				case 2:								
						break;
				case 3:
				case 4:	
						break;
				case 5:
				case 6:	
						break;
				case 7:
				case 8:
						flag = 1;
						flag1 = 0;
						flag2 = 1;
						count = count + 1;
						if(count == 4)
							count = 1;
						clk_display();	
						break;
				case 9:
				case 10:
						flag = 0;
						flag1 = 1;
						flag2 = 0; 
						count = 0;
						break;
				case 11:
				case 12:
						break;
			}
			while(ADC_DATA < 0xd0)
			{
				delay(10);
				Get_AD_Result(2);
			}
		}
	}					
}

void clk_display()
{
	uchar temp;
	clear();

	temp=second/10;
	buffer[8] |= table9[temp][0];	
	buffer[9] |= table9[temp][1];
	buffer[10]|= table9[temp][2];
	temp=second%10;	
	buffer[6] |= table10[temp][0];	
	buffer[7] |= table10[temp][1];
	buffer[8] |= table10[temp][2];
		
	buffer[12]|= 0x04;
	
	temp=minute/10;
	buffer[12]|= table7[temp][0];	
	buffer[13]|= table7[temp][1];
	temp=minute%10;			
	buffer[10]|= table8[temp][0];	
	buffer[11]|= table8[temp][1];
		
	buffer[14]|=0x02;
		
	temp=hour/10;
	buffer[15] |= table5[temp][0];	
	buffer[16] |= table5[temp][1];
	buffer[17] |= table5[temp][2];
	temp=hour%10;	
	buffer[13] |= table6[temp][0];	
	buffer[14] |= table6[temp][1];
	buffer[15] |= table6[temp][2];
	
	lcd_show();

}
void init()
{
	P1 = P1 | 0X04;           
	P1_ADC_EN = 0X04; 
	clear(); 
	lcd_show(); 	
	TMOD = 0x11;
	TH0 = (65536 - 50000 * 11.0592 / 12) / 256;
	TL0 = (65536 - 46080) % 256;//50000*11.0592/12=46080
//	TH1=(65536-46080)/256;
//	TL1=(65536-46080)%256;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
	if(P3_3 == 0)
	{
		if(P4_3 == 0)
			sw = 0;
		else 
			sw = 1;
	}
	else 
	{
		if(P4_3 == 0)
			sw = 2;
		else 
			sw = 3;
	}	
}
void main()
{
	init();
	while(1)
	{
		keyscan();
		keyscan_knob();
	}
}

void timer0() interrupt 1
{
	uchar temp;
	TH0 = (65536 - 50000 * 11.0592 / 12) / 256;
	TL0 = (65536 - 46080) % 256;
	if(flag1)
	{
		aa ++;
		if(aa == 20)
		{
			aa = 0;
			second ++;
			if(second == 60)
			{
				second = 0;
				second_h = 0;
				second_l = 0;
				minute ++;
				if(minute == 60)
				{
					minute = 0;
					minute_h = 0;
				    minute_l = 0;	
					hour ++;
					if(hour == 24)
					hour = 0;
				}	
			}
			clk_display();
		}
	}	
	if(flag2)
	{
		mm ++;
		if(mm == 8)
		{
		    mm = 0;
			blinking = !blinking;
			if(blinking == 1)
			{
				if(count == 1)
				{
					buffer[8] &= 0x03 ;	
					buffer[9] &= 0;
					buffer[10] &= 0xfe;
			
					buffer[6] &= 0x07;	
					buffer[7] &= 0;
					buffer[8] &= 0xfc;	
				}

				if(count == 2)
				{
					buffer[12] &= 0x04;	
					buffer[13] &= 0x80;
				
					buffer[10] &= 0x01;	
					buffer[11] &= 0;				
				}
				if(count == 3)
				{
			
					buffer[15] &= 0x3f;	
					buffer[16] &= 0x01;
					buffer[17] &= 0xe0;		
					buffer[13] &= 0x7f;	
					buffer[14] &= 0x02;
					buffer[15] &= 0xc0;
				}	
			}
			else
			{
				if(count == 1)
				{
					temp = second / 10;
					buffer[8] |= table9[temp][0];	
					buffer[9] |= table9[temp][1];
					buffer[10]|= table9[temp][2];
					temp = second % 10;	
					buffer[6] |= table10[temp][0];	
					buffer[7] |= table10[temp][1];
					buffer[8] |= table10[temp][2];	
				}
				if(count == 2)
				{
					temp = minute / 10;
					buffer[12]|= table7[temp][0];	
					buffer[13]|= table7[temp][1];
					temp = minute % 10;			
					buffer[10]|= table8[temp][0];	
					buffer[11]|= table8[temp][1];				
				}
				if(count == 3)
				{		
					temp = hour / 10;
					buffer[15] |= table5[temp][0];	
					buffer[16] |= table5[temp][1];
					buffer[17] |= table5[temp][2];
					temp = hour % 10;	
					buffer[13] |= table6[temp][0];	
					buffer[14] |= table6[temp][1];
					buffer[15] |= table6[temp][2];
				}		
			}
			lcd_show();	
		}
	}	
}

⌨️ 快捷键说明

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