📄 com1-2.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 + -