久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1808|回復: 0
打印 上一主題 下一主題
收起左側

收集到的LCD1602液晶顯示程序,令附加動態顯示。

[復制鏈接]
跳轉到指定樓層
樓主
ID:554397 發表于 2019-6-10 11:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>        //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include "scancodes.h"
#include "LCD1602.h"

sbit Key_Data = P3^0 ;   //定義Keyboard引腳
sbit Key_CLK =P3^2;      //使用中斷

bit BF;         
bit Shift;               //定義上檔鍵標志
bit Key_UP;              //定義通碼斷碼標志
unsigned char KeyV;
unsigned char IntNum;
unsigned char DisNum;
/******************************************************************/
/*                    函數聲明                                    */
/******************************************************************/
void Decode(unsigned char ScanCode);  //解碼子程序
/******************************************************************/
/*                    主函數                                      */
/******************************************************************/
void main()
{

IT1 = 0;                              //設外部中斷1為低電平觸發
EA = 1;                               //外部中斷開
EX0 = 1;                              //開中斷

InitLcd();                            //初始化1602液晶屏

do
{
if (BF)
   Decode(KeyV);
else
   EA = 1; //開中斷
}
while(1);
}
/******************************************************************/
/*                    外部中斷讀入信息                            */
/******************************************************************/
void Keyboard_out(void) interrupt 0
{
if ((IntNum > 0) && (IntNum < 9))
   {
        KeyV = KeyV >> 1;                //因鍵盤數據是低>>高,結合上一句所以右移一位
        if (Key_Data)
            KeyV = KeyV | 0x80;          //當鍵盤數據線為1時到最高位
        }
        IntNum++;
        while (!Key_CLK);                //等待PS/2CLK拉高

        if (IntNum > 10)
           {
                IntNum = 0;                  //當中斷11次后表示一幀數據收完,清變量準備下一次接收
                BF = 1;                      //標識有字符輸入完了
                EA = 0;                      //關中斷等顯示完后再開中斷
                }
}

/******************************************************************/
/*                    解碼信息                                    */
/******************************************************************/
void Decode(unsigned char ScanCode) //注意:如SHIFT+G為12H 34H F0H 34H F0H 12H,也就是說shift的通碼+G的通碼+shift的斷碼+G的斷碼
{
unsigned char TempCyc;

if (!Key_UP)                        //當鍵盤按下時
        {
        switch (ScanCode)
                        {
                        case 0xF0 :             // 當收到0xF0,Key_UP置1表示斷碼開始
                                Key_UP = 1;
                                break;

                        case 0x12 :             // 左 SHIFT
                                Shift = 1;
                                break;

                        case 0x59 :             // 右 SHIFT
                                Shift = 1;
                                break;

                        default:
                                if(!Shift)          //如果SHIFT沒按下
                                        {
                                        for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
                                        if (UnShifted[TempCyc][0] == ScanCode)
                                                {
                                                   ShowChar(DisNum,UnShifted[TempCyc][1]);
                                                   DisNum++;
                                                   if(DisNum==32)
                                               {
                                                    WriteCommand(0x01);//清屏
                                                    DisNum=0;//重頭寫數據
                                               }
                                             }
                     }
                                else //按下SHIFT
                    {
                                        for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表顯示
                                        if (Shifted[TempCyc][0] == ScanCode)
                       {
                                                  ShowChar(DisNum,Shifted[TempCyc][1]);
                                               DisNum++;
                        if(DisNum==32)
                                              {
                                                 WriteCommand(0x01);//清屏
                               DisNum=0;//重頭寫數據
                                                   }
                                                  }
                      }

                                        break;
                        }
        }
else
        {
        Key_UP = 0;
        switch (ScanCode) //當鍵松開時不處理判碼,如G 34H F0H 34H 那么第二個34H不會被處理
                        {
                        case 0x12 : // 左 SHIFT
                                Shift = 0;
                                break;

                        case 0x59 : // 右 SHIFT
                                Shift = 0;
                                break;
                        }
        }
BF = 0; //標識字符處理完了
}



93-1602液晶動態顯示.rar

22.6 KB, 下載次數: 8, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久九九九九 | 中文字幕免费在线 | 久久天堂网 | 成人欧美一区二区三区黑人孕妇 | 一级欧美黄色片 | 日韩最新网站 | 一区二区三区精品视频 | 99综合 | 亚洲欧美精品国产一级在线 | 亚洲欧美日韩一区 | 日韩午夜网站 | 红桃视频一区二区三区免费 | 亚洲欧美日韩高清 | 最近中文字幕第一页 | 精品欧美一区二区三区 | 欧美精品久久 | 中文字幕视频一区二区 | 国产成人综合av | 国产精品国产a | 在线日韩视频 | 99tv| 欧美激情精品久久久久久 | 久久久精品在线 | 精品免费观看 | 免费的av网站 | 亚洲成人一区二区 | av一二三四 | 香蕉视频91 | 天堂影院av | 国产在视频一区二区三区吞精 | 97在线播放 | 亚洲 中文 欧美 日韩 在线观看 | 欧美日韩三级 | 欧美一级二级在线观看 | 亚洲精品美女在线观看 | 日韩免费一级 | 午夜国产| 国产成人小视频 | 精品免费国产视频 | 精品国产欧美日韩不卡在线观看 | 午夜小电影 |