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

📄 pelikon.c

📁 pelikon 公司PSEL驱动程序
💻 C
字号:
#include <avr/io.h>
#include <inttypes.h> 
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#include <avr/delay.h>
#include <pelikon.h>
/*---------------------------------------------------------------------------------
    just as the test screens.
------------------------------------------------------------------------------------*/
static const PROGMEM  unsigned char  rcBuffer[7][16] = {
							    {
							    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    },//clear the display screen.
							    {
							    0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
                                0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
							    },//full
							    {
							    0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    },//1
							    {
							    0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    },//2
								{
							    0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    },//3
								{
							    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    },//4
							    {
							    0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							    }//5
								};

//key scan variable which in interrupt
volatile unsigned char timer_ov_num1 = 0,timer_ov_num2 = 0,first_keyscan = 0,key_value = 0,
                          key_valueold = 0,key = 0;

//variable which in timer1 interrupt
volatile unsigned char T1_flag = 0,timer_flag = 0;
volatile unsigned char T1_num = 0,T1_num2 = 0;
volatile unsigned char num = 0;

//variable which in main function flag
volatile unsigned char screen_flag = 1;

#define VKEY1 1
#define VKEY2 2

unsigned char keyscan(void)
{
	unsigned char temp;
	temp = PINB;
	if ((temp & 0x01) == 0)
	{
		return VKEY1;
	} 
	else if ((temp & 0x02) == 0)
	{
		return VKEY2;
	} 
	return 0;
}
void disbouncing(void)
{
	while(key_value != 0)
	{
	    if(key < 10)
		{
		    key = 0;
	    }
	    else
		{
		    key = 0;
	    }
	}
}
void write_segments(unsigned char index)
{
	unsigned char i;
	for (i = 0;i < 16;i++)
	{
		if (pgm_read_byte(&rcBuffer[index][i]))
		{
			set_DATA_IN();
	    }
		else
		{ 
			reset_DATA_IN();
		}
		reset_CLK();
        _delay_loop_1(4);
        set_CLK();
	}
	reset_DATA_IN(); 
	reset_CLK();
	_delay_loop_1(4);
	reset_LE();
	_delay_loop_2(4100);
	set_LE();
}

void init_pelikon (void)
{
    DDRA = 0xff;	
    PORTA = 0x01;
	write_segments(0);//17,there is no gray level segment.
	TCCR0=0x01;
	TCNT0=0x00;
	TIMSK=TIMSK|0x01;

	sei();
}

int main(void)
{
    unsigned char i;
    init_pelikon();
	for(;;) 
	{
	    write_segments(screen_flag);
	    while (key_value == 0);	
        if (key_value == 1)
	    {
	        disbouncing ();
	        screen_flag ++;
	        if (screen_flag == 7)
		    {
		        screen_flag = 1;
		    }
	    }
	    else if (key_value == 2)
	    {
	        disbouncing ();
		    screen_flag --;
		    if (screen_flag == 0)
	    	{
		    screen_flag = 6;
	    	}
	    }
	}
	
}

SIGNAL(SIG_OVERFLOW0)
{
	timer_ov_num1++;
	if(timer_ov_num1 == 20)
	{
	    timer_ov_num1 = 0;        
		timer_ov_num2++;
	    if(timer_ov_num2 == 157)//157
		{
		    timer_ov_num2 = 0;
			if(first_keyscan == 0)
			{
			    first_keyscan = 1;
			    key_valueold = 0;
			}
			if(key_value != 0)
			{
			    key_valueold = key_value;
			}
		    key_value = keyscan();
	        if((key_value == key_valueold) && (key_value != 0))
			{
		        key++;
	        }
			if((key_valueold != key_value) && (key < 10))
			{
				key = 0;
			}
		}
	}
}

⌨️ 快捷键说明

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