佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1905|回复: 8

NXP LPC2103 + 4X4 Keypad + 57600bps, 8, N, 1 TX --> PC=RX

[复制链接]
发表于 22-5-2008 11:22 PM | 显示全部楼层 |阅读模式
有没有大大能教我怎样用 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;
                        }
                }
        }
}

评分

参与人数 1积分 +30 收起 理由
fritlizt + 30 原创内容

查看全部评分

回复

使用道具 举报


ADVERTISEMENT

发表于 26-5-2008 11:56 PM | 显示全部楼层
支持你原创分享。
加分奖励奖励
我人现在在hometown,没有"ka chang"
回去过后再拿那片版来试试看。
成果会分享分享。
回复

使用道具 举报

发表于 29-5-2008 07:05 PM | 显示全部楼层
打算自己做的dev board ?
是的话, 算我一份, 我要
我的arm 9 还老板了,现在打算自己买片开发板。
但是budget 有限。。。
回复

使用道具 举报

 楼主| 发表于 29-5-2008 08:38 PM | 显示全部楼层
原帖由 chan1314 于 29-5-2008 07:05 PM 发表
打算自己做的dev board ?
是的话, 算我一份, 我要
我的arm 9 还老板了,现在打算自己买片开发板。
但是budget 有限。。。


arm  9 cpu 我就没有什么研究过了。。 你搞的好像都很 hign-end 下的。。。
我都没有用到 embedded os 的。。
hi... 还有很多问题。。做一个 IR received function 都有问题酱..
回复

使用道具 举报

发表于 29-5-2008 08:55 PM | 显示全部楼层
erm. 先不管arm 几。
armx2xTxxx 是有 MMU, 所以能用 win ce or linux. eg arm920t

如果普通arm, 能搞 uclinux.

我现在在找着。从下面学起才能真正了解。。。
回复

使用道具 举报

发表于 29-5-2008 10:56 PM | 显示全部楼层
原帖由 chan1314 于 29-5-2008 07:05 PM 发表
打算自己做的dev board ?
是的话, 算我一份, 我要
我的arm 9 还老板了,现在打算自己买片开发板。
但是budget 有限。。。


嘻嘻。有这样的打算。 不过暂时没这样快出来。
我用买的dev board作testing purpose先。
有的话预埋你一份
回复

使用道具 举报

Follow Us
发表于 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 | 显示全部楼层
原帖由 fritlizt 于 29-5-2008 10:56 PM 发表


嘻嘻。有这样的打算。 不过暂时没这样快出来。
我用买的dev board作testing purpose先。
有的话预埋你一份


你的dev board 那里买?
我想上网买但是payment 和时间是问题。
最好能一个星期内收到。
我在印度的网站看到很便宜, 但是运送费和开发板的价钱差不多
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 30-5-2008 11:40 AM | 显示全部楼层
原帖由 fritlizt 于 29-5-2008 10:57 PM 发表


ir received function?你是用什么receiver?
有schematics 吗?
拿上来讨论讨论一下,可能可以帮到你。


还差一点。。我一定能克服的!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 26-12-2024 12:26 PM , Processed in 0.159892 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表