历史上的今天
返回首页

历史上的今天

今天是:2025年06月28日(星期六)

2020年06月28日 | STM8 PS2接口应用子程序

2020-06-28 来源:eefocus

软件设计

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

目 的: 建立PCF8563操作库

目标系统: 基于STM8单片机 

应用软件: Cosmic CxSTM8  

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


#include


void PS2_Init(void)

{

       PRESS_DATA_DDR;

       SHIFT_DATA_DDR;

       IN_SDA;

}


void check(void)

{

       static u8 rcvBits = 0; //接收次数,中断次数


       OUT_SCK; //设置"SCK_DDR"为输出

       DELAY();

       SET_SCK; //"SCK_PORT"输出"1"

       DELAY();


       IN_SCK; //设置"SCK_DDR"为输入

       DELAY();

       if(!GET_SCK)

{

              if((rcvBits>0) && (rcvBits<9))

              { 

                     keyVal=keyVal>>1; //数据是LSB格式

                     //IN_SDA; //当有对键盘有属性设置时,注意输入输出切换

                     //DELAY();

                     if(GET_SDA) 

                            keyVal=keyVal|0x80; 

              }

              rcvBits++;

              while(!GET_SCK); //等待PS/2CLK拉高


              if(rcvBits>10)

              {

                     rcvBits=0; //接收11次表示接收完一帧数据

                     rcvF=1; //标识有字符已经输入

              }

       }

}


u8 keyHandle(u8 val) 

{

       u8 i;

       static _Bool isUp=0; //按键释放动作标志

       static _Bool shift=0; //shift键按下标志

       rcvF = 0; 

       //PRESS_DATA_PORT = val; //状态指示

       if(!isUp)

       {

              switch(val)

              {

                     case 0xF0 : // a relase action

                            isUp = 1;

                            break;

                     case 0x12 : // Left shift

                            shift = 1;

                            break;

                     case 0x59 : // Right shift

                            shift = 1;

                            break;

                     default:

                     if(!shift) // If shift not pressed

                     { 

                            //for(i=0; unshifted[i][0]!=val && unshifted[i][0];i++);

                            //上述写法较为灵活,但KEIL非UNIXC标准,不能采用该写法


                            for(i=0;unshifted[i][0]!=val && i<59; i++);

                            if(unshifted[i][0] == val) 

                                   {

                                   //SHIFT_DATA_PORT = val;

                                   val = unshifted[i][1];

                                   return val;

                            }

//状态指示

                     } 

                     else // If shift pressed

                     {

                            //for(i=0; unshifted[i][0]!=val && unshifted[i][0]; i++);

                            //上述写法较为灵活,但KEIL非UNIXC标准,不能采用该写法


                     for(i=0;shifted[i][0]!=val && i<59; i++);


                            if(shifted[i][0] == val) 

{

                                   //SHIFT_DATA_PORT = val;

                                   val = shifted[i][1];

                                   return val;

                            }//状态指示


                           }

                     }

       }

       else 

       {

              isUp=0;

              switch(val)

              {

                     case 0x12 : // Left SHIFT

                            shift = 0;

                            break;

                     case 0x59 : // Right SHIFT

                            shift = 0;

                            break;

                     }

       }

       return 0xff;

}


推荐阅读

史海拾趣

Cypress(赛普拉斯)公司的发展小趣事

Cypress公司成立于1982年,总部设在美国加州的San Jose。创业之初,公司专注于高速CMOS SRAM、EEPROM、PAL器件和TTL逻辑器件的设计和开发。这一时期,Cypress通过引入创新的技术和产品设计,在竞争激烈的电子芯片市场中逐渐崭露头角。公司凭借对技术的持续投入和积累,为未来的发展奠定了坚实的基础。

Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

人才是企业发展的核心竞争力。Excelics Semiconductor深知这一点,因此他们非常重视人才的引进与培养。公司设立了专门的研发部门,吸引了大量优秀的半导体技术人才。同时,他们还建立了完善的培训体系,不断提升员工的技能和素质。这些举措为公司的持续发展提供了坚实的人才保障。

Diotec Electronics Corp公司的发展小趣事

Diotec Electronics Corp公司成立于XXXX年,由一群富有激情的工程师和技术专家创立。在初创期,公司专注于研发高性能的电子元器件,以应对当时市场上对高效率和可靠性元件的迫切需求。通过不断的技术创新,Diotec成功开发出了一款具有革命性的整流二极管,该产品以其卓越的性能和稳定性迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。

广芯电子(BROADCHIP)公司的发展小趣事

面对全球化的市场趋势,Diotec开始实施全球化战略。公司加强与国际市场的联系,积极开拓海外市场。同时,Diotec还加强与全球合作伙伴的合作,共同推动电子行业的发展。展望未来,Diotec将继续坚持技术创新和品质至上的理念,致力于成为全球领先的电子元器件供应商。同时,公司还将关注新兴市场和技术趋势,为未来的发展做好充分准备。

Ferranti Electric Inc公司的发展小趣事

随着技术的不断发展和创新,Ferranti Electric Inc公司在电气领域取得了显著的成就。特别是在设计和制造用于恶劣气候或关键安全领域的复杂、高可靠性电气产品方面,公司展示了其卓越的技术实力。这些产品不仅广泛应用于军用领域,同时也为民用领域提供了大量电气产品解决方案。公司的全球影响力逐渐扩大,产品远销世界各地。

Exclara Inc公司的发展小趣事

随着技术的不断成熟和产品的日益完善,Exclara开始将目光投向全球市场。公司积极拓展海外市场,通过参加国际展会、与当地合作伙伴建立战略合作关系等方式,不断提升品牌知名度和市场份额。同时,公司也在全球范围内建立了完善的销售网络和售后服务体系,以确保客户能够享受到优质的产品和服务。

问答坊 | AI 解惑

【社区大讲堂】之让我们学学AVR! (m16;led流水灯;外部中断;定时器;串口中断)

【社区大讲堂】之万人学习51单片机!之后,EEWORLD又推力作:让我们学学AVR! 火热进行中......             讲座资料已经更新完毕,请大家有问题直接发问。       讲座资料集 ...…

查看全部问答>

求帮写一个CPLD7位十进制计数器的程序(Verilog)

还有个小问题:如果在计数器后面加一个选择器,那么这个选择器是32选4还是28选4?…

查看全部问答>

开发经验

开发经验 1. 做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号 ...…

查看全部问答>

ADI公司BF547的simulator

装了VisualDSP++ 5.0 Update7,可还是不能写DDR寄存器。每次程序执行到对DDR寄存器赋值,就出现\"The system mmr references a unit or peripheral not currently supported by this simulator\".....哪位大侠能帮着解决一下?…

查看全部问答>

单片机资料宝典

想学单片机的朋友可以看一下!挺实用的资料…

查看全部问答>

请问我的PDA可以成简易开发板么?

俺对硬件是完全0基础, 手头有一过时的PDA (sony clie peg-sj30/u) 闲着也是闲着 dragonball VZ 33mHZ cpu ; ram/rom 为16m 之类的配置. 现有os为palm os4.1 请问我可以将其拆吧拆吧做成一个类似于开发板这类的东西么?   简单来说就 ...…

查看全部问答>

在EVC下怎么显示.JPG格式的图片?

请问各位高手,在EVC下显示.JPG格式的图片要怎么做啊?因为.BMP格式的图片太占内存了.(用API做的)…

查看全部问答>

探讨全球安全监控市场规模有多大?

到底全球安防市场规模有多大? 这是一个很有趣的议题. 安全监控产业可大略分为影像监控、防盗入侵检测、门禁、整合性系统等产品类. 但每个地区对产品的归属定义不同, 因而所做出来的规模探讨就有差别. 光视频监控的市场规模又可区分成模拟与网络(IP ...…

查看全部问答>

ATmega128矩阵键盘问题

void key_scan()                   //键盘扫描函数 {     uchar row,col,temp1,temp2,key;                  ...…

查看全部问答>

程序编译成功,但是不能下载进板子里,新手紧急求助!

程序是关于用GPIO端口输出方波的 #include #include #include \"inc/hw_types.h\" #include \"inc/hw_memmap.h\" #include \"driverlib/sysctl.h\" #include \"driverlib/rom.h\" #include \"driverlib/pin_map.h\" #include \"driverlib ...…

查看全部问答>