娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月03日(星期一)

2020年02月03日 | MSP430學(xué)習(xí)筆記9-PS2鍵盤解碼

發(fā)布者:532829319hmk 來源: elecfans關(guān)鍵字:MSP430  PS2  鍵盤解碼 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

    PS2鍵盤解碼的基本原理是通過外部中斷讀取鍵盤輸出的串行信號,在根據(jù)掃描碼進(jìn)行查表解碼。鍵盤發(fā)送往主機(jī)的信號總是在時鐘的下降沿因此此中斷是在下降沿觸發(fā),且時鐘信號是由鍵盤給出,因此使用P1口中斷(已經(jīng)在初始化端口時設(shè)置)。發(fā)送的數(shù)據(jù)位11位,第一位是起始位,總為0,緊接是8個數(shù)據(jù)位,然后是奇校驗(yàn)位,最后是停止位總為1.


    本程序只能對基本按鍵(即鍵被按下時產(chǎn)生三個字節(jié)的掃描碼的按鍵)做出解碼,包括所有的可顯示字符鍵和Table,Back Space和Ente三個特殊功能鍵。基本按鍵的掃描碼由三個字節(jié)組成,第1個字節(jié)為接通碼,第2、3字節(jié)為斷開碼;其中第1字節(jié)和第3字節(jié)相同,中間字節(jié)為斷開標(biāo)志0xf0。例如:通碼和斷碼是以什么樣的序列發(fā)送到你的計(jì)算機(jī)使得字符G 出現(xiàn)在你的字處理軟件里呢?因?yàn)檫@是一個大寫字母需要發(fā)生這樣的事件次序按下Shift 鍵按下G 鍵釋放G 鍵釋放Shift 鍵,與這些時間相關(guān)的掃描碼如下:Shift 鍵的通碼12h G鍵的通碼34h G 鍵的斷碼F0h 34h Shift 鍵的斷碼F0h 12h 因此發(fā)送到你的計(jì)算機(jī)的數(shù)據(jù)應(yīng)該是12h 34h F0h 34h F0h 12h如果按鍵按著不放會連續(xù)發(fā)送通碼命令,可以連續(xù)顯示字符(沒有驗(yàn)證,實(shí)驗(yàn)驗(yàn)證是可以的)。


    具體的說明都已經(jīng)在程序中做了注釋,主程序,中斷服務(wù)函數(shù)中讀取鍵盤發(fā)送的值:

/*****************************************************

程序功能:接收并解碼來自標(biāo)準(zhǔn)鍵盤的基本按鍵的掃描碼

然后在1602液晶上顯示。按Back Space鍵可以前向刪除顯

示字符,按Space鍵可以后向刪除顯示字符。


-----------------------------------------------------

撥碼開關(guān)的SN74LVC2454和LCD位撥至ON

讀取鍵盤的信號需要電平轉(zhuǎn)換,注意設(shè)置SN74LVC2454的轉(zhuǎn)換方向

跳線設(shè)置:將跳線座J13的B8腳和P1.7腳短接

-----------------------------------------------------

測試說明:敲定標(biāo)準(zhǔn)鍵盤上的按鍵,觀察液晶顯示

*****************************************************/

#include 

#include "cry1602.h"

#include "cry1602.C"

#include "PS2Keyboard.h"

#include "PS2Keyboard.C"


#define SIDval  P5IN & BIT6

#define BufferSize  32      //顯示緩存大小

unsigned char bitcount=11;          //位計(jì)數(shù)變量

unsigned char kb_buffer[BufferSize];    //顯示緩存

unsigned char input=0;       //數(shù)據(jù)壓入緩存位置指針

unsigned char output=0;      //數(shù)據(jù)彈出緩存位置指針   

unsigned char pebit=0xff;    //奇偶校驗(yàn)標(biāo)志位

unsigned char recdata=0;     //接收到的數(shù)據(jù)

unsigned char tishi[]={"this is a demo!"};


/****************主函數(shù)****************/

void main(void)

{

    uchar disptmp,i;

    uchar x = 0,y = 0;

    uchar first = 1;

    

    WDTCTL = WDTPW + WDTHOLD;       //關(guān)閉看門狗

    P6DIR |= BIT2;P6OUT &= ~BIT2;   //打開電平轉(zhuǎn)換

    P2DIR |= BIT3;P2OUT |= BIT3;    //方向5V-->3.3V

    /*------選擇系統(tǒng)主時鐘為8MHz-------*/

    BCSCTL1 &= ~XT2OFF;                 // 打開XT2高頻晶體振蕩器

    do

    {

        IFG1 &= ~OFIFG;                 //清除晶振失敗標(biāo)志

        for (i = 0xFF; i > 0; i--);     //等待8MHz晶體起振

    }

    while ((IFG1 & OFIFG));             // 晶振失效標(biāo)志仍然存在?

    BCSCTL2 |= SELM_2;                  //主時鐘選擇高頻晶振

    

    LcdReset();                 //復(fù)位液晶

    DispNchar(0,0,15,tishi);    //液晶顯示提示信息

    Init_KB();                  //初始化鍵盤端口

    _EINT();                    //打開全局中斷

  

    while(1)

    {

        LPM3;                   //進(jìn)入低功耗模式

        

        if(first)

        {

            first = 0;

            LcdWriteCommand(0x01, 1);   //顯示清屏

            LcdWriteCommand(0x0f, 1);   //打開游標(biāo)

        }

        

        disptmp = GetChar();    //讀取鍵值對應(yīng)的ASCII碼

        if(disptmp != 0xff)     //取出了一個有效字符

        {

            if(disptmp == 8) //如果是退格鍵

            {

                if((x == 0) && (y == 0))//如果游標(biāo)在第1行第1位

                {

                    x = 15;

                    y = 1;

                    Disp1Char(x,y,0x20); //0x20是空格的ASCII碼

                    LocateXY(x,y);

                }

                else if((x == 0) && (y == 1))//如果游標(biāo)在第2行第1位

                {

                    x = 15;

                    y = 0;

                    Disp1Char(x,y,0x20); 

                    LocateXY(x,y);

                }

                else

                {

                    Disp1Char(--x,y,0x20); 

                    LocateXY(x,y);

                }

            }

            else if((disptmp == 9) || (disptmp == 13)) //如果是Table鍵或Enter鍵

            {

                _NOP();   

            }

            else    //其余字符顯示

            {

                Disp1Char(x++,y,disptmp);

                if(x == 16)           //如果一行顯示完畢

                {

                    x = 0;

                    y ^= 1;

                    LocateXY(x,y);  //重新定位游標(biāo)位置

                }

            }

        }

    }

}


/*******************************************

函數(shù)名稱:PORT1_ISR 

功    能:P1端口的中斷服務(wù)函數(shù),在這里接收來

          自鍵盤的字符


說明:鍵盤發(fā)送往主機(jī)的信號總是在時鐘的下降沿

因此此中斷是在下降沿觸發(fā),且時鐘信號是由鍵盤

給出,因此使用P1口中斷(已經(jīng)在初始化端口時

設(shè)置)。發(fā)送的數(shù)據(jù)位11位,第一位是起始位,總

為0,緊接是8個數(shù)據(jù)位,然后是奇校驗(yàn)位,最后是

停止位總為1.

參    數(shù):無

返回值  :無

********************************************/

#pragma vector=PORT1_VECTOR

__interrupt void  PORT1_ISR(void)

{

    if(P1IFG & BIT7)            //如果是clock的中斷

    {

        P1IFG &=~ BIT7;         //清除中斷標(biāo)志 

        

        if(bitcount == 11)        //接收第1位

        {

            if(SIDval)          //起始位總為0如果是1就不是起始位

                return;         //返回

            else  

                bitcount--;     //是起始位就接著接收下一位,進(jìn)行計(jì)數(shù)

        } 

        else if(bitcount == 2)    //接收奇偶校驗(yàn)位

        {   

            if(SIDval)          //如果校驗(yàn)位等于1

                pebit = 1;      //這個程序中只是對校驗(yàn)位進(jìn)行讀取,正確與否并為做判斷

            else

                pebit = 0;

            bitcount--;

        }

        else if(bitcount == 1)    //接收停止位

        {

            if(SIDval)          //若停止位正確

            {

                bitcount = 11;    //復(fù)位位計(jì)數(shù)變量

                if( Decode(recdata) )    //解碼獲得此鍵值的ASCII值并保存

                    LPM3_EXIT;           //退出低功耗模式

                recdata = 0;          //清除接收數(shù)據(jù)

            }

            else                //如果出錯

            {

                bitcount = 11;

                recdata = 0;    

            }

        }

        else                    //接收8個數(shù)據(jù)位

        {

            recdata >>= 1;

            if(SIDval)  recdata |= 0x80;

            bitcount--;

        }

   }

}


解碼程序PS2Keyboard.C:

#include

#include "PS2Keyboardcode.h"


#define BufferSize  32

extern uchar kb_buffer[BufferSize];

extern uchar input;

extern uchar output;

extern uchar flag;

/*******************************************

函數(shù)名稱:PushBuff

功    能:將一個字符壓入顯示緩存,如果緩存以

          滿則覆蓋前面的數(shù)據(jù)

參    數(shù):c--要顯示的字符

返回值  :無

********************************************/

[1] [2]
關(guān)鍵字:MSP430  PS2  鍵盤解碼 引用地址:MSP430學(xué)習(xí)筆記9-PS2鍵盤解碼

上一篇:MSP430學(xué)習(xí)筆記6-動態(tài)數(shù)碼管的顯示
下一篇:MSP430學(xué)習(xí)筆記3-PWM的產(chǎn)生

推薦閱讀

電子網(wǎng)消息,市場研究機(jī)構(gòu)TrendForce最新數(shù)據(jù)指出,2017年中國IC設(shè)計(jì)業(yè)收入將達(dá)到2006億元人民幣,同比增長22%。2018年中國IC行業(yè)還將增長20%左右,營收預(yù)計(jì)將達(dá)到2400億元人民幣。?2017年中國IC設(shè)計(jì)行業(yè)收入排名方面,大唐半導(dǎo)體將退出前十名,而WillSemi(韋爾半導(dǎo)體)和GigaDevice(兆易創(chuàng)新)以其強(qiáng)勁的收入表現(xiàn)進(jìn)入前十名。?此外,由于麒麟芯片的普...
2019年2月2日,全球知名投資機(jī)構(gòu)CBInsight發(fā)布了全球310家獨(dú)角獸公司榜單,其中中國企業(yè)入選的包括商湯科技、一點(diǎn)咨詢、小紅書、滿幫集團(tuán)等入選。值得一提的是,在智能物流行業(yè)近年來持續(xù)發(fā)力的AI機(jī)器人公司Geek+也成功入選此榜單,躋身全球獨(dú)角獸企業(yè)。CBInsight將入選的獨(dú)角獸公司分為13類,從汽車行業(yè)、人工智能、自動駕駛再到電子商務(wù)等。榜單根據(jù)不同...
它們提供的不同功能以及用來響應(yīng)的方法決定了聊天機(jī)器人的類型。 ? 聊天機(jī)器人為企業(yè)提供了許多好處,其中一些好處是它們能夠提供快速響應(yīng),易于使用并增加客戶參與度。由于這些好處,聊天機(jī)器人已取代了智能手機(jī)應(yīng)用。不僅這些好處,而且其應(yīng)用的多樣化也幫助它們獲得了很大吸引力。這些多樣化的應(yīng)用是其創(chuàng)建方法和技術(shù)多樣化的結(jié)果。而且,如果您認(rèn)...
2021年伊始,深耕智能汽車領(lǐng)域八年后,百度正式進(jìn)場造車;近乎同一時間,英特爾自動駕駛子公司Mobileye預(yù)計(jì)2021年上半年將在東京、上海、巴黎以及紐約市測試其自動駕駛汽車技術(shù);美國蘋果公司的“泰坦計(jì)劃”(即蘋果提出的自動駕駛汽車研發(fā)計(jì)劃)將在今年9月推出醞釀已久的電動汽車“蘋果汽車”(AppleCar)。即便受到新冠疫情的嚴(yán)重沖擊、自動駕駛汽車及車聯(lián)...

史海拾趣

問答坊 | AI 解惑

ABB控制系統(tǒng)在大口徑無縫鋼管生產(chǎn)線中的應(yīng)用

介紹了ABB 公司的 AC450系列集散控制系統(tǒng)在大口徑無縫鋼管生產(chǎn)線中的應(yīng)用,著重描敘了系統(tǒng)配置和控制功能,以及 ABB 的 8"C&& 和 !E<&& 總線在系統(tǒng)中的應(yīng)用。…

查看全部問答∨

JPEG2000中嵌入式塊編碼的FPGA設(shè)計(jì)

摘要: 為了使JPEG2000能應(yīng)用到便攜產(chǎn)品中,采用了高效存儲結(jié)構(gòu)的硬件實(shí)現(xiàn)方案,并設(shè)計(jì)了相應(yīng)的寄存器組和控制邏輯。仿真結(jié)果表明所設(shè)計(jì)所設(shè)計(jì)的編碼器能夠在0.256s內(nèi)完成對一幀512×512的灰度圖像的編碼。 關(guān)鍵詞: 基于最優(yōu)截?cái)嗟那度胧骄幋a JP ...…

查看全部問答∨

電池有問題嗎?

最近在做小車,用L298做H橋,電池是用于數(shù)字萬用表的9v電池,用兩個串聯(lián),經(jīng)7812后輸出12V給L298的Vs,再經(jīng)7805供給單片機(jī)和L298的Vss,在電機(jī)兩端并聯(lián)了用于指示前進(jìn)和后退的燈; 測試時,單個電機(jī)(沒有負(fù)載)前進(jìn)、后退都沒問題,但兩個電機(jī)一 ...…

查看全部問答∨

會說話的迎客魚

據(jù)說在美國,這種會說話的魚很常見,粗看起來,似乎就是一個做工精美的魚標(biāo)本掛在墻上,如果有人走近,這條魚會突然的將頭轉(zhuǎn)向他,嘰里咕嚕地說上幾句,而且嘴還一張一合的。如果是在國內(nèi),不知道“受害者”會作何反應(yīng),驚愕是肯定的了,驚愕之后 ...…

查看全部問答∨

適用于多種蓄電池過放電保護(hù)電路設(shè)計(jì)

適用于多種蓄電池過放電保護(hù)電路設(shè)計(jì)…

查看全部問答∨

為何新買的PC串口是一公一母?

最近遇到單位計(jì)算機(jī)接一個自動設(shè)備,用的就是串口來通信,向上級(服務(wù)器)發(fā)送自動設(shè)備的數(shù)據(jù)又要占用一個串口。 原配的計(jì)算機(jī) 2 個串口都是公的,而新買的計(jì)算機(jī)的 2 個串口是一公一母。 請問:     1.為何是這樣?     ...…

查看全部問答∨

MS “博客達(dá)人”征文大賽熱烈啟動,獎品豐厚,火速報名中!!!

沒有做不到,只有想不到!這句話應(yīng)用在開發(fā)技術(shù)領(lǐng)域再適合不過了。以微軟新一代操作系統(tǒng)Windows Vista;最新版本瀏覽器IE8;新一代互聯(lián)網(wǎng)多媒體及交互技術(shù)Silverlight以及用來開發(fā)下一代用戶界面基礎(chǔ)的WPF,還有大家熟悉的SQL Server, VSTS等技術(shù)為 ...…

查看全部問答∨

PROTEL99SE高級功能使用技巧

PROTEL99SE高級功能使用技巧…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 阆中市| 盘山县| 古丈县| 兴宁市| 绍兴县| 当阳市| 剑川县| 本溪| 玉林市| 吐鲁番市| 临邑县| 天峨县| 从化市| 简阳市| 德钦县| 大安市| 龙井市| 嘉鱼县| 临桂县| 永顺县| 邵武市| 大田县| 上高县| 黑龙江省| 东光县| 闻喜县| 鄯善县| 板桥市| 察隅县| 广安市| 资溪县| 延庆县| 时尚| 安仁县| 惠水县| 皋兰县| 巴塘县| 柳河县| 中卫市| 库伦旗| 二连浩特市|