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

📄 com1-2.c

📁 AT91SAM9263, DBGU and UART0 charecter sending and receiver program
💻 C
字号:

/************************************************************************************
** 
** Version Control Information:
**  
**  $Header: keypad_main.c$
**  $Version: 1.0$
**  $Last modified: NOvember 28, 2006 $
**  $Description:  Code for interfacing the thermal printer,4x4 keypad(new board) and  lcd screen for 
**                 printing which key ressed from the keypad.
*/
/***********************************************************
 * program for interfacing GSM with taures board also interfacing 3x3
 * matrix key pad and LCD display.
 * for keypad port pin PA4-7 used
 * for LCD port pin PB0-9 from GPIO connector
 * 
 * *************************************************/
 
#include "AT91SAM9263.h"

#define  linefeed 	0x0D 
#define  ent_no 	0x01
#define  no		0x00 
#define  yes       	0x01


void COM_init();
void Put_Char(unsigned int);
void put_c_2( unsigned char);
void print_str_2( char *,int);
void delay(void);
void debounce(void);
void keyinit(void);
void led_blink(void);
void send_on_com(char *, int);
void display_com(unsigned char);
void put_c_1(unsigned char);
void  print_str_1(char *, int);
void Put_C(unsigned char);
void Put_S(unsigned char*);

int main(void)
{     
  unsigned char key;    
  unsigned char prev_key;
            
  key=0;
  prev_key=0;
	
  /* for 9263 */

	*PMC_PCER = *PMC_PCER | 0x80;

	*PIOC_ASR = 0xC0000000;    //com1 DBGU
      *PIOC_PDR = 0xC0000000;

      *PIOA_ASR = 0x0C000000;    // com2 US0
      *PIOA_PDR = 0x0C000000;

	*DBGU_CR = *DBGU_CR | 0x000000AC;               /* Reset Receiver/Tr */
      *DBGU_MR = 0x000208C0;
      *DBGU_BRGR = 27;                         	/*115200 for 100MHz PLLA Receiver 16 bit sampling */
	//*DBGU_BRGR = 325;                         	/*9600 for 100MHz PLLA Receiver 16 bit sampling */
	//*DBGU_BRGR = 81;
	*DBGU_CR = *DBGU_CR | 0x00000050;                 /* Enable Tx/Receiver */

	/* Config COM */
	*US0_CR = *US0_CR | 0x000000AC;			/* Reset Receiver/Tr */
	*US0_MR = 0x000208C0;
			*US0_BRGR = 27;				/* for 200MHz PLLA Receiver 16 bit sampling */

	*US0_CR = *US0_CR | 0x00000050;			/* Enable Tx/Receiver */


	keyinit();					//Initialise the key pad
	
	led_blink();

	while(1)
	{		
		while((key = keyread()) == 0); 		//polling forkey press and for message on UART recv.
	
		if(key != prev_key)
		{		  
			prev_key = key;
			switch(key) {
				case '1':
					print_str_1("'1' Pressed\n",12);
					break;

				case '2':
					print_str_1("'2' Pressed\n",12);
					break;

				case '3':
					print_str_1("'3' Pressed\n",12);
					break;

				case '4':
					print_str_1("'4' Pressed\n",12);
					break;

				case '5':
					print_str_1("'5' Pressed\n",12);
					break;

				case '6':
					print_str_1("'6' Pressed\n",12);
					break;

				case '7':
					print_str_1("'7' Pressed\n",12);
					break;

				case '8':
					print_str_1("'8' pressed\n",12);
					break;

				case '9':
					print_str_1("'9' Pressed\n",12);
					break;

				default:
					break;
			}
		}	
	} 
}

int keyread(void)
{
	unsigned int key_val = 0;
	unsigned int row = 0,col = 0;
	unsigned char temp;


/* for 9263 */	
//-------------------- Read column-------------------- 
	*PIOB_OER = 0x01C00000;		// Set B22 - 24 as o/p
   	*PIOB_ODR = 0x0E000000;		// Set B25 - 27 as i/p
	*PIOB_SODR = 0x01C00000;	// Set B22 - 24 as '1'
 	col = *PIOB_PDSR & 0x0FC00000;	// Read Pin Data- Status Register	 
	col = (col >> 22) ;//rahul
//-------------------- Read Row ----------------------------
	*PIOB_OER = 0x0E000000;		// Set B25 - 27 as i/p 
	*PIOB_ODR = 0x01C00000;		// Set B24 - 26 as o/p 
	row = *PIOB_PDSR & 0x0FC00000;	// Read Pin Data- Status Register 
	row = (row >> 22);//rahul
	debounce();

		switch(col) {
			case 0x27:
				if(row == 0x05)		key_val = '2';	
				else if(row == 0x06)	key_val = '1';

				else if(row == 0x03)	key_val = '3';
			break;

			case 0x17:
				if(row == 0x05)		key_val = '5';
				else if(row == 0x06)	key_val = '4';
				else if(row == 0x03)	key_val = '6';
			break;

			case 0x0f:
				if(row == 0x05)		key_val = '8';
				else if(row == 0x06)	key_val = '7';
				else if(row == 0x03)	key_val = '9';
			break;

			default: key_val = '0';
			break;
		}

	return key_val;
}


void debounce(void)
{
	unsigned int j;
	for (j=0;j<250000;j++);
}


void delay()
{
	int i;

	for(i=0; i < 100000; i++);
    	for(i=0; i < 100000; i++);
}

void keyinit(void)
{
	*PMC_PCER = *PMC_PCER | (0x1 << 3);		/* PIOB PID for 9263 is 3 */
	*PIOB_PER = 0x0FC00000; 			/* PB22-PB27 for 9263 are keypad lines */
  	*PIOB_PPUDR = 0x0FC00000;
}

void led_blink(void)	
{
	int i;
	*PIOA_OER = 0x003F0000;				//enable op direction on PIOA pins having LEDs

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

		*PIOA_SODR = 0x003F0000;			//set op data register	
		delay();	
		*PIOA_CODR = 0x003F0000;			//clear op data register		
		delay();					
				print_str_2("com2 led\n",9);
				Put_S("123456789abcd");
				print_str_1("com1 led ",9);
	}
}


void put_c_1(unsigned char val)
{
	*DBGU_THR = val;
	while(!(*DBGU_SR & 0x02));
}

void  print_str_1(char *str, int len)
{
	while(len-- != 0)
	{
		put_c_1(*str);
		str++;
		
	}
	*DBGU_THR = 0x20;
	while(!(*DBGU_SR & 0x02));
}



void put_c_2(unsigned char val)
{
	*US0_THR = val;
	while(!(*US0_CSR & 0x02));	
}

void print_str_2( char *buff, int len)
{
	while(len-- != 0)
	{
		put_c_2(*buff);
		buff++;
		
	}
	*US0_THR = 0x20;
	while(!(*US0_CSR & 0x02));

}
void Put_C(unsigned char val)
{
	if(val>0x40)
		val=val+0x40;
	//while(!(*US0_CSR & 0x02));
	*US0_THR = val  ;
	while(!(*US0_CSR & 0x02));	
}

void Put_S(unsigned char *buff)
{
	while(*buff)
	{
		Put_C(*buff);
		buff++;
	}
}



⌨️ 快捷键说明

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