查看: 1906|回复: 8
|
NXP LPC2103 + 4X4 Keypad + 57600bps, 8, N, 1 TX --> PC=RX
[复制链接]
|
|
有没有大大能教我怎样用 proteus 画 schematic 好吗?懒惰学下。。
还有,我没有什么用到 pointer 在我的 program structure(push keyboard button logic) 里,我的逻辑 (push keyboard button logic)判断也写得很简单下,还有改进的地方吗?
还有。。大大们,如何用 PC 的 keyboard 来 application? 我的意思是说,我要接一个 PC keyboard 到我的板上,然后收 keyboard 的 signal 来 dispaly 在我的 LCD 上,有没有什么范例可以找得到?datasheet? 我只知道要用 cpu 的一根external interrupt 来收 keyboard data, 还有 keyboard 会送 clock 给我。。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
pin 脚因为跟 LCD share 的关系,我又再次的用 74HC273 来接我的 4X4 keypad。。
KROW = 74HC273 clock
Crystal = 20Mhz, PLL 之后到60 Mhz
pCLK = 60Mhz
=====================================================================
#include <LPC2103.H>
#include "UART0.h"
#include "Timer0.h"
#define KROW 1<<15 // 74HC273 clock
#define KCOL0 1<<24 // 用 4.7kR 做 pull-up resistor
#define KCOL1 1<<25 // 用 4.7kR 做 pull-up resistor
#define KCOL2 1<<26 // 用 4.7kR 做 pull-up resistor
#define KCOL3 1<<27 // 用 4.7kR 做 pull-up resistor
#define KROW1 1<<10 // 用 4.7kR 做 pull-up resistor
#define KROW2 1<<11 // 用 4.7kR 做 pull-up resistor
#define KROW3 1<<12 // 用 4.7kR 做 pull-up resistor
#define KROW4 1<<13 // 用 4.7kR 做 pull-up resistor
void Timer0_Init (void)
{
T0TCR = 0x0;
T0CTCR = 0x0;
T0TC = 0x0;
T0PR = 0x0;
T0PC = 0x0;
T0MR0 = 0x0;
T0MCR = 0x3;
}
void Timer0_Enable (void)
{
T0MR0 = 299999; // Delay 5ms
T0TCR = 0x1;
}
signed char UART0_Init (unsigned int baud, unsigned char datab, unsigned char parity, unsigned char stopb)
{
unsigned int bak;
PINSEL0 |= 0x00000005;
/* Parameter filter */
if ( (baud==0) || (baud>115200) )
return 0;
if ( (datab<5) || (datab>8) )
return 0;
if (parity > 4)
return 0;
if ( (stopb==0) || (stopb>2) )
return 0;
/* Setting UART Baudrate */
U0LCR = 0x80; //DLAB = 1
bak = (60000000 >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak & 0xFF;
/* Setting Serial Port Mode */
bak = datab - 5;
if (stopb == 2)
bak |= 0x04;
if (parity != 0)
{
parity = parity - 1;
bak |= 0x08;
}
bak |= parity << 4;
U0LCR = bak;
return 1;
}
void UART0_PutCh (unsigned char Ch)
{
U0THR = Ch;
while( (U0LSR&0x40)==0 );
}
void Keypad_Init (void)
{
PINSEL0 |= 0x00000000;
PINSEL1 |= 0x00000000;
IODIR |= KROW | KCOL0 | KCOL1 | KCOL2 | KCOL3;
IOCLR |= KROW;
IOSET |= KCOL0 |KCOL1 | KCOL2 | KCOL3;
}
void Keypad_Col (unsigned int kCol)
{
IOCLR |= KROW;
IOSET |= KCOL0 | KCOL1 | KCOL2 | KCOL3;
IOCLR |= kCol;
IOSET |= KROW;
IOSET |= KROW;
}
void ScanKey (unsigned int kCol, unsigned int kRow)
{
unsigned short i;
if ( (IOPIN&kRow) == 0)
{
for (i=0; i<10000; i++);
if ( (IOPIN&kRow) == 0 )
{
while ( (IOPIN&kRow) == 0 );
if (kRow == KROW1)
{
if (kCol ==KCOL0)
UART0_PutCh (0x30);
if (kCol ==KCOL1)
UART0_PutCh (0x34);
if (kCol ==KCOL2)
UART0_PutCh (0x38);
if (kCol ==KCOL3)
UART0_PutCh (0x43);
}
if (kRow == KROW2)
{
if (kCol ==KCOL0)
UART0_PutCh (0x31);
if (kCol ==KCOL1)
UART0_PutCh (0x35);
if (kCol ==KCOL2)
UART0_PutCh (0x39);
if (kCol ==KCOL3)
UART0_PutCh (0x44);
}
if (kRow == KROW3)
{
if (kCol ==KCOL0)
UART0_PutCh (0x32);
if (kCol ==KCOL1)
UART0_PutCh (0x36);
if (kCol ==KCOL2)
UART0_PutCh (0x41);
if (kCol ==KCOL3)
UART0_PutCh (0x45);
}
if (kRow == KROW4)
{
if (kCol ==KCOL0)
UART0_PutCh (0x33);
if (kCol ==KCOL1)
UART0_PutCh (0x37);
if (kCol ==KCOL2)
UART0_PutCh (0x42);
if (kCol ==KCOL3)
UART0_PutCh (0x46);
}
UART0_PutCh (0x0A);
UART0_PutCh (0x0D);
}
}
}
int main (void)
{
unsigned int i, j;
Timer0_Init();
UART0_Init (57600, 8, 0, 1);
Keypad_Init();
Timer0_Enable();
while (1)
{
for (i=0x1000000; i<=0x8000000; i<<=1)
{
Keypad_Col (i);
for (j=0x400; j<=0x2000; j<<=1)
{
while ( (T0IR&0x01) == 0)
ScanKey (i, j);
T0IR = 0x01;
}
}
}
} |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 26-5-2008 11:56 PM
|
显示全部楼层
支持你原创分享。
加分奖励奖励
我人现在在hometown,没有"ka chang"
回去过后再拿那片版来试试看。
成果会分享分享。 |
|
|
|
|
|
|
|
发表于 29-5-2008 07:05 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 29-5-2008 08:38 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-5-2008 08:55 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-5-2008 10:56 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 29-5-2008 10:57 PM
|
显示全部楼层
原帖由 半夜鬼 于 29-5-2008 08:38 PM 发表
arm 9 cpu 我就没有什么研究过了。。 你搞的好像都很 hign-end 下的。。。
我都没有用到 embedded os 的。。
hi... 还有很多问题。。做一个 IR received function 都有问题酱..
ir received function?你是用什么receiver?
有schematics 吗?
拿上来讨论讨论一下,可能可以帮到你。 |
|
|
|
|
|
|
|
发表于 29-5-2008 11:36 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 30-5-2008 11:40 AM
|
显示全部楼层
原帖由 fritlizt 于 29-5-2008 10:57 PM 发表
ir received function?你是用什么receiver?
有schematics 吗?
拿上来讨论讨论一下,可能可以帮到你。
还差一点。。我一定能克服的!! |
|
|
|
|
|
|
| |
本周最热论坛帖子
|