基于89S51的PC键盘读取(PS2)

上传人:飞*** 文档编号:27177594 上传时间:2018-01-07 格式:DOC 页数:7 大小:53.50KB
返回 下载 相关 举报
基于89S51的PC键盘读取(PS2)_第1页
第1页 / 共7页
基于89S51的PC键盘读取(PS2)_第2页
第2页 / 共7页
基于89S51的PC键盘读取(PS2)_第3页
第3页 / 共7页
基于89S51的PC键盘读取(PS2)_第4页
第4页 / 共7页
基于89S51的PC键盘读取(PS2)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《基于89S51的PC键盘读取(PS2)》由会员分享,可在线阅读,更多相关《基于89S51的PC键盘读取(PS2)(7页珍藏版)》请在金锄头文库上搜索。

1、硬件描述:PS2 键盘的时钟线(clk)接 89S51 的 INT0(P3.2),数据线 data 接(P3.3)LCD 的控制端口分别为: RS = P27,RW = P26,EP = P25,数据端口为 P0,液晶显示偏压 VL 必须接。/*函数功能:本程序主要通过外部中断 INT0 及 3.3 端口读取 PS2 键盘值并通过 LCD1602 显*示,键扫描码的解码通过数组方式解码,程序的解码功能主要针对数字及大小写字母和常*用标点符号 *创建者: 曹兴*创建日期:2008-10-11*版本号: 2008101101*/#includereg51.h#includestdio.h/*端口定

2、义*/#define DATA P0 /LCD 数据传输端口sbit RS = P27; /LCD 控制端口定义sbit RW = P26;sbit EP = P25;sbit k_data = P33; /PS/2 数据线端口sbit k_clk = P32; /PS/2 时钟线端口unsigned char bitcount = 11; /PC 键盘数据长度计数unsigned char input = 0; /缓冲区读指针unsigned char k_buf32; /键盘缓冲区/没有按下 shift 键的 PC 键盘扫描码unsigned char code unshifted2=28

3、,a,50,b,33,c,35,d,36,e,43,f,52,g,51,h,67,i,59,j,66,k,75,l,58,m,49,n,68,o,77,p,21,q,45,r,27,s,44,t,60,u,42,v,29,w,34,x,53,y,26,z,69,0,22,1,30,2,38,3,37,4,46,5,54,6,61,7,62,8,70,9,14,78,-,85,=,84,91,76,;,65,73,.,74,/;/按下 shift 键的 PC 键盘扫描码unsigned char code shifted2=28,A,50,B,33,C,35,D,36,E,43,F,52,G,5

4、1,H,67,I,59,J,66,K,75,L,58,M,49,N,68,O,77,P,21,Q,45,R,27,S,44,T,60,U,42,V,29,W,34,X,53,Y,26,Z,69,),22,!,30,38,#,37,$,46,%,54,61,&,62,*,70,(,14,78,_,85,+,93,|,84,91,76,:,82,65,74,?;/*函数名称:put_k_buf*函数功能:将解码后的字符放入键盘缓冲区内*入口参数:k_char*出口参数:无*/void put_k_buf(unsigned char k_char)k_bufinput = k_char; /送键盘值

5、 ASCII 码到键盘缓冲区if(input1);if(k_data )dat|=0x80;bitcount-;/*函数名称:delayns*函数功能:LCD 延时子程序*入口参数:time*出口参数:无*/void delayns(unsigned char time)unsigned char i;for(;time0;time-)for(i = 0; i 250; i+) ;/*函数名称:lcd_buzy*函数功能:测试 LCD 忙碌状态*入口参数:无*出口参数:result*/bit lcd_buzy()bit result;RS = 0; RW = 1;EP = 1;delayns(

6、1); /此处延时特别重要 (必不可少)result = (bit)(DATA delayns(1);EP = 0;return result;/*函数名称:lcd_w_order*函数功能:写指令数据到 LCD 子程序*入口参数:cmd*出口参数:无*/void lcd_w_order(unsigned char cmd)while(lcd_buzy(); /判断 LCD 是否忙碌RS = 0;RW = 0;EP = 1;DATA = cmd;delayns(1);EP = 0;/*函数名称:lcd_w_data*函数功能:写入显示数据到 LCD 子程序*入口参数:dat*出口参数:五*/v

7、oid lcd_w_data(unsigned char dat)while(lcd_buzy(); /判断 LCD 是否忙碌RS = 1;RW = 0;EP = 1;DATA = dat;delayns(1);EP = 0;/*函数名称:lcd_post*函数功能:设定显示位置子程序*入口参数:pos*出口参数:无 */void lcd_post(unsigned char pos)lcd_w_order(pos | 0x80);/*函数名称:lcd_init*函数功能:LCD 初始化子程序*入口参数:无*出口参数:无*/void lcd_init()lcd_w_order(0x38); /

8、显示模式设置delayns(1);lcd_w_order(0x0c); /显示光标设置,开显示delayns(1);lcd_w_order(0x06); /显示光标移动(右移) delayns(1);lcd_w_order(0x01); /清屏delayns(1);/*函数名称:main*函数功能:本程序主要通过外部中断 INT0 及 3.3 端口读取 PS2 键盘值并通过 LCD1602 显示,键*扫描码的解码通过数组方式解码,程序的解码功能主要针对数字及大小写字母和常用标点*符号*入口参数:无*出口参数:无 */void main()unsigned char j,i=0;EA = 1;IT0 = 1;EX0 = 1;while(1)i=0;lcd_init(); / 初始化 LCD delayns(10);lcd_post(0x00); /设置显示位置while(iinput) lcd_w_data(k_bufi); /显示字符i+;if(i=16)lcd_post(0x40); / 设置显示位置 for (j=0;j20;j+)delayns(200);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号