亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ps2key.c

?? PS2Key.c鍵盤掃描+液晶1602顯示
?? C
字號:
/*============================================================
        使用1602液晶顯示和PS/2鍵盤的示例     明浩  2004/2
        -------------------------------------------------
           http://www.cdle.net  http://bbs.cdle.net
==============================================================

SMC1602A(16*2)模擬口線接線方式
連接線圖:	
       ---------------------------------------------------
       |LCM-----51   |	LCM-----51   |	LCM------51      |
       --------------------------------------------------|
       |DB0-----P1.0 |	DB4-----P1.4 |	RW-------P2.0    |
       |DB1-----P1.1 |	DB5-----P1.5 |	RS-------P2.1    |
       |DB2-----P1.2 |	DB6-----P1.6 |	E--------P2.2    |
       |DB3-----P1.3 |	DB7-----P1.7 |	VLCD接1K電阻到GND|
       ---------------------------------------------------

Keyboard接線
      PS/2--------51
      1 DATA------P3.4
      3 GND
      4 VCC
      5 CLK-------P3.3 接在51的外部中斷,觸發方式為低電平

本程序源碼只供學習參考,不得應用于商業用途,如有需要請聯系作者。

[注:AT89x51使用12M或11.0592M晶振,實測使用11.0592M]
[Keil uV2 7.01編譯運行通過 程序中沒有做鍵盤數據的奇偶校驗]

=============================================================*/
#include <at89x51.h>
#include "scancodes.h"

#define LCM_RW  P2_6 //定義LCD引腳
#define LCM_RS  P2_7
#define LCM_E   P2_5
#define LCM_Data  P0

#define Key_Data P3_4 //定義Keyboard引腳
#define Key_CLK  P3_3

#define Busy    0x80 //用于檢測LCM狀態字中的標識

void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
void Decode(unsigned char ScanCode);
void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,BuysC);

unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
unsigned char code cdle_net[] = {"--COOL--"};
unsigned char code email[] = {"yun!!wait..."};
unsigned char code Cls[] = {"                "};
static unsigned char IntNum = 0; //中斷次數計數
static unsigned char KeyV; //鍵值
static unsigned char DisNum = 0; //顯示用指針
static unsigned char Key_UP=0;//Key_UP是鍵松開標識,Shift是Shift鍵按下標識
static unsigned char BF = 0; //標識是否有字符被收到

bit flag=0;

void main(void)
{

	Delay400Ms(); //啟動等待,等LCM講入工作狀態
	LCMInit(); //LCM初始化
	Delay5Ms(); //延時片刻(可不要)

	DisplayListChar(0, 0, cdle_net);
	DisplayListChar(0, 1, email);
	Delay400Ms();
	Delay400Ms();
	Delay400Ms();
	Delay400Ms();
	Delay400Ms();

	DisplayListChar(0, 0, Cls);	
	DisplayListChar(0, 1, Cls);
	
	IT1 = 0; //設外部中斷1為低電平觸發
	EA = 1;
	EX1 = 1; //開中斷

	do
		{
			if (BF)
				Decode(KeyV);
			else
				EA = 1; //開中斷
		}
	while(1);
}

//寫數據
void WriteDataLCM(unsigned char WDLCM) 
{
	ReadStatusLCM(); //檢測忙
	LCM_Data = WDLCM;
	LCM_RS = 1;
	LCM_RW = 0;
	LCM_E = 0; //若晶振速度太高可以在這后加小的延時
	LCM_E = 0; //延時
	LCM_E = 1;
}

//寫指令
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測
{
	if (BuysC) ReadStatusLCM(); //根據需要檢測忙
	LCM_Data = WCLCM;
	LCM_RS = 0;
	LCM_RW = 0;	
	LCM_E = 0;
	LCM_E = 0;
	LCM_E = 1;	
}

//讀數據
unsigned char ReadDataLCM(void)
{
	LCM_RS = 1; 
	LCM_RW = 1;
	LCM_E = 0;
	LCM_E = 0;
	LCM_E = 1;
	return(LCM_Data);
}

//讀狀態
unsigned char ReadStatusLCM(void)
{
	LCM_Data = 0xFF; 
	LCM_RS = 0;
	LCM_RW = 1;
	LCM_E = 0;
	LCM_E = 0;
	LCM_E = 1;
	while (LCM_Data & Busy); //檢測忙信號
	return(LCM_Data);
}

void LCMInit(void) //LCM初始化
{
	LCM_Data = 0;
	WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
	Delay5Ms(); 
	WriteCommandLCM(0x38,0);
	Delay5Ms(); 
	WriteCommandLCM(0x38,0);
	Delay5Ms(); 

	WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
	WriteCommandLCM(0x08,1); //關閉顯示
	WriteCommandLCM(0x01,1); //顯示清屏
	WriteCommandLCM(0x06,1); // 顯示光標移動設置
	WriteCommandLCM(0x0F,1); // 顯示開及光標設置
}

//按指定位置顯示一個字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
	Y &= 0x1;
	X &= 0xF; //限制X不能大于15,Y不能大于1
	if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
	X |= 0x80; //算出指令碼
	WriteCommandLCM(X, Y); //發命令字
	WriteDataLCM(DData); //發數據
}

//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
	unsigned char ListLength;

  ListLength = 0;
	Y &= 0x1;
	X &= 0xF; //限制X不能大于15,Y不能大于1
	while (DData[ListLength]>0x19) //若到達字串尾則退出
		{
			if (X <= 0xF) //X坐標應小于0xF
				{
					DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
					ListLength++;
					X++;
				}
		}
}

//5ms延時
void Delay5Ms(void)
{
	unsigned int TempCyc = 5552;
	while(TempCyc--);
}

//400ms延時
void Delay400Ms(void)
{
	unsigned char TempCycA = 5;
	unsigned int TempCycB;
	while(TempCycA--)
		{
			TempCycB=7269;
			while(TempCycB--);
		};
}

void Keyboard_out(void) interrupt 2
{
	if ((IntNum > 0) && (IntNum < 9))
		{			
			KeyV = KeyV >> 1; //因鍵盤數據是低>>高,結合上一句所以右移一位
			if (Key_Data) KeyV = KeyV | 0x80; //當鍵盤數據線為1時為1到最高位
		}
	IntNum++;
	while (!Key_CLK); //等待PS/2CLK拉高

	if (IntNum > 10)
		{
			IntNum = 0; //當中斷11次后表示一幀數據收完,清變量準備下一次接收
			BF = 1; //標識有字符輸入完了
			EA = 0; //關中斷等顯示完后再開中斷 (注:如這里不用BF和關中斷直接調Decode()則所Decode中所調用的所有函數要聲明為再入函數)
		}
}

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: Key_UP=1;break;

					    default :
								
							if (DisNum > 15&&flag==0)
							  {
								DisplayListChar(0, 1, Cls);//清LCD第二行
								DisNum = 0;
								flag=1; 
						    	}
						    else if(DisNum>15&&flag==1)
							  {
								DisplayListChar(0, 0, Cls);//清LCD第1行
								DisNum = 0;
								flag=0; 
						   	   }
						     else 
							    {
								  for (TempCyc = 0;(keycode[TempCyc][0]!=ScanCode)&&(TempCyc<18); TempCyc++);
								  if ((keycode[TempCyc][0] == ScanCode)&&(ScanCode!=0x5A)&&(ScanCode!=0x66))
								  DisplayOneChar(DisNum, flag, keycode[TempCyc][1]);
								  DisNum++;
								 }

							if(ScanCode==0x5A)
								   {
								        if(flag==0)
										 { DisNum=0;flag=1;}
										 else
										  {DisNum=0;flag=0;}
								    }
							 if(ScanCode==0x66)
								    {
									     DisNum--;
										 DisplayOneChar(DisNum, flag,' ');
									}
						}

				  }

					else{
					      Key_UP=0;
						 

						 }
					 
	
	
	BF = 0; //標識字符處理完了
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利资源站| 美女视频黄 久久| 久久亚洲综合色一区二区三区| 欧美最新大片在线看 | 欧美无砖砖区免费| 99久久婷婷国产精品综合| 成人一级黄色片| 丁香婷婷综合色啪| 成人黄色免费短视频| 不卡电影一区二区三区| www.视频一区| 日本精品一级二级| 欧美三级日韩三级| 日韩欧美一区二区久久婷婷| 精品国产一区久久| 亚洲国产精品精华液2区45| 中文字幕一区二区三区不卡 | 日本韩国精品在线| 色拍拍在线精品视频8848| 欧美视频在线不卡| 欧美一级xxx| 国产日韩成人精品| 亚洲日本va午夜在线电影| 亚洲第一激情av| 久久aⅴ国产欧美74aaa| 国产91精品在线观看| 91丨porny丨国产入口| 在线观看日韩国产| 久久综合久久综合九色| 中文字幕综合网| 青青草91视频| 成人91在线观看| 在线观看91av| 国产精品欧美一级免费| 午夜视黄欧洲亚洲| 国产精品亚洲午夜一区二区三区 | 日本一二三四高清不卡| 一区二区免费在线| 国精品**一区二区三区在线蜜桃 | 欧美经典一区二区| 一区二区不卡在线播放| 久久精品国产免费| 色偷偷成人一区二区三区91| 日韩欧美久久一区| 亚洲精品亚洲人成人网 | 国精产品一区一区三区mba视频 | 青青草成人在线观看| 成人深夜福利app| 56国语精品自产拍在线观看| 国产精品亲子伦对白| 久久99精品久久久| 在线免费视频一区二区| 久久久精品国产免费观看同学| 亚洲一区二区三区在线播放| 国产成人无遮挡在线视频| 欧美老肥妇做.爰bbww| 中文字幕不卡在线播放| 精油按摩中文字幕久久| 精品视频一区二区不卡| 日韩一区在线播放| 国产成人免费网站| 久久综合久久鬼色| 理论片日本一区| 在线电影一区二区三区| 亚洲欧美二区三区| 成人福利在线看| 亚洲国产精品激情在线观看| 国产老妇另类xxxxx| 欧美成人福利视频| 免费成人美女在线观看| 欧美日本在线观看| 亚洲午夜在线视频| 在线欧美日韩国产| 一区二区三区在线免费观看| 成人激情av网| 中文字幕av一区二区三区高 | 国产精品五月天| 国产盗摄一区二区| 亚洲国产精品精华液2区45| 国产成人av影院| 国产精品女同互慰在线看| 国产在线看一区| 久久久电影一区二区三区| 激情丁香综合五月| 久久中文字幕电影| 国产精品一品二品| 国产精品久久久久久久久免费丝袜| 国产精品影视天天线| 欧美激情一区二区三区全黄| 成人综合在线视频| 亚洲男人的天堂av| 欧美日韩在线观看一区二区| 日韩国产成人精品| 欧美不卡激情三级在线观看| 国产成人在线视频免费播放| 国产精品麻豆网站| 欧美三级在线看| 久久国产日韩欧美精品| 国产欧美一区二区精品性色| 91碰在线视频| 奇米影视在线99精品| 久久一区二区视频| 色综合夜色一区| 日韩高清国产一区在线| 精品免费日韩av| 91啦中文在线观看| 美女在线观看视频一区二区| 国产无遮挡一区二区三区毛片日本| 成人av在线看| 日本欧美一区二区三区乱码| 国产蜜臀97一区二区三区| 欧美在线你懂的| 国模一区二区三区白浆| 亚洲黄网站在线观看| 欧美日韩国产天堂| 国产传媒久久文化传媒| 亚洲福利一二三区| 欧美国产一区在线| 欧美二区乱c少妇| 99久久精品国产麻豆演员表| 日韩电影免费在线观看网站| 国产精品午夜在线| 欧美大片在线观看| 欧美视频在线一区二区三区| 国产成a人亚洲精| 爽好久久久欧美精品| 国产精品久久久久久妇女6080 | 成人福利视频在线看| 日韩成人免费电影| 一个色妞综合视频在线观看| 久久九九久久九九| 欧美一级艳片视频免费观看| 91福利区一区二区三区| 国产白丝精品91爽爽久久| 亚洲福中文字幕伊人影院| 自拍偷拍欧美激情| 久久蜜桃av一区精品变态类天堂| 欧美精品久久天天躁| 在线免费观看日本欧美| 成人午夜免费电影| 国产精品一二三区在线| 久久精品理论片| 日韩高清一级片| 亚洲动漫第一页| 一级做a爱片久久| 亚洲视频综合在线| 国产精品国产精品国产专区不片| www国产成人免费观看视频 深夜成人网| 欧美视频一区在线| 欧美日韩在线播放三区| 色噜噜狠狠成人网p站| 色综合欧美在线| 91麻豆国产福利在线观看| 99re这里只有精品6| 91最新地址在线播放| 色乱码一区二区三区88| 91麻豆精东视频| 欧美性色综合网| 欧美日韩mp4| 7777女厕盗摄久久久| 欧美一级视频精品观看| 精品美女在线播放| 久久天堂av综合合色蜜桃网| 久久久精品2019中文字幕之3| 久久久久久久综合狠狠综合| 国产日韩欧美a| 中文字幕在线不卡一区二区三区| 国产精品国产精品国产专区不蜜 | 国产一区二区看久久| 国产毛片精品视频| 国产精品 欧美精品| www.66久久| 欧洲av一区二区嗯嗯嗯啊| 欧美一区二区日韩一区二区| 日韩视频一区二区| 国产嫩草影院久久久久| 国产精品不卡在线观看| 亚洲国产成人av网| 毛片av一区二区| 成人av在线一区二区| 欧美三级蜜桃2在线观看| 欧美成人精品二区三区99精品| 欧美精品一区二区在线播放| 国产精品久久久久久户外露出 | 亚洲人123区| 日韩成人一区二区| 国产91清纯白嫩初高中在线观看| 91在线精品一区二区三区| 在线播放日韩导航| 欧美激情一区二区在线| 一区二区成人在线观看| 国内精品久久久久影院薰衣草| 99re在线视频这里只有精品| 69堂精品视频| 日韩毛片在线免费观看| 美女看a上一区| 一本大道久久a久久精二百| 欧美大片日本大片免费观看| 亚洲精品国产成人久久av盗摄| 久久机这里只有精品|