STM8 PS2接口应用子程序

发布者:雅致书香最新更新时间:2020-06-28 来源: eefocus关键字:STM8  PS2接口  子程序 手机看文章 扫描二维码
随时随地手机看文章

软件设计

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

目 的: 建立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;

}


关键字:STM8  PS2接口  子程序 引用地址:STM8 PS2接口应用子程序

上一篇:STM8 PCF8563时钟芯片子程序
下一篇:STM8 LCD602显示子程序

推荐阅读最新更新时间:2024-11-08 14:36

pic单片机常用1s延时子程序
pic单片机常用1s延时子程序 DELAY MOVLW 06H ;将外层参数值06H经过W MOVWF 20H ;送入用作外循环变量 LOOP1 MOVLW 0EBH ;将中循环参数之经过W MOVWF 21H ;送入用作中循环变量 LOOP2 MOVLW 0ECH ;将内循环参数值经过W MOVWF 22H ;送入用作内循环变量 LOOP3 DECFSZ 22H ;变量递减,若为0跳过 GOTO LOOP3 ;跳转到LOOP3 DECF
[单片机]
IAR for stm8 中指定编译的起始地址
IAR for stm8 中指定编译的起起地址 已经用STVD+cosmic完成了IAP功能,但想试着在STM8上跑上官的UCOS,不得不用IAR编译,但编译后代码的生成地址怎么再从0X9000开始生成呢,找遍全网,也没有发现三言两语直接的表白,又对IAR环境不熟,看过了IAR下的工程设置的全部选项,都没有发现怎么修改这个地址,IAR的这个地址的修改,并不象KEIL及STVD下那么直接,它必须通过IAR的根目录下有个CONFIG的文件夹,里面有各种单片机的*.icf的文件,我看着有两处0x8000改为0x9000,然后编译文件,呵呵,果然有效,在STVP下,发现HEX文件就是从0x9000开始生成代码了。找的好辛苦,又不太懂英文看帮
[单片机]
使用STM8单片机+NTC热敏电阻自制简易温度巡检仪
  最近在测试设备的时候需要监测设备的温度,平常测试时都是通过红外热成像仪测试,然后手动记录数据。这样测试的话工作量比较大,需要几分钟就记录一次数据。于是想着能不能用单片机做一个测试温度的装置,用电脑自动记录数据。手头刚好有STM8S003单片机和 5K的NTC热敏电阻,于是就做了一个简易的温度测试装置,并使用伏特加上位机软件将温度波形显示出来。   最终测试效果如图所示:   下面将制作步骤分享出来。   首先设计NTC热敏电阻的采样电路。   这里使用最简答电阻分压电路,将热敏电阻和一个10K电阻串联分压,然后将电压值直接送到单片机的AD采样口,由于热敏电阻的阻值会随着温度变化,所以送入单片机口的电压值也会随着
[单片机]
使用<font color='red'>STM8</font>单片机+NTC热敏电阻自制简易温度巡检仪
STM8 ADC转换模式-------单次扫描模式
STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。 单次扫描模式 该模式是用来转换从AIN0到 之间的一连串模拟通道,‘n’是在 ADC_CSR寄存器的换的通道编号。CONT 位以被清零时通过置位 ADON 位来启动。 注意:当使用扫描模式时,不可以将 AIN0 到 AINn 之间通道对应的 I/O 口设为输出状态,因为 ADC 的多路选择器已经将这些 I/O 口的输出模块禁用了。 对于单次扫描模式,转换是从AIN0通道开始的,而且结果数据被存储在数据缓冲寄存器ADC_DBxR 中,当最后一个通道(通道‘n’)被转换完成后,EOC(转换结束)标志被置位,当EOC
[单片机]
stm8——串口printf的实现
串口通信是单片机学习的一个最基本、最重要的功能之一。串口可以间接的当做调试接口使用,实现单片机与电脑之间的通信。还可以与一些模块(比如蓝牙、wifi)通信,也可以作为和其他单片机通信的工具。作为开发者,熟悉串口是必须的。 =========================================== STM8L的USART特性: 我们在使用串口的时候,主要关心:波特率、停止位、奇偶校验位。 再次就是怎样接收、发送数据。常用:阻塞式发送数据、中断方式接收数据。 ========================================== 在单片机的调试过程中经常会要适时地输出变量的值,这时pri
[单片机]
stm8 rtc时钟
stm8 rtc时钟可以使用内部低频时钟源,或者外部低速32768Hz时钟源,关于rtc部分代码如下: #include stdio.h #include stm8l15x.h void init_rtc(void) { RTC_InitTypeDef RTC_InitStr; RTC_TimeTypeDef RTC_TimeStr; RTC_DateTypeDef RTC_DateStr; #if 0 /* LSI */ CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1); CLK_
[单片机]
stm8 全局变量定义 声明
1.ST Visual Develop 开发环境下.h文件里面不能定义变量,要把变量定义在.C文件里面,然后在.H文件里面声明即可。补充:今天突然发现还有一种情况,变量在一个.h文件里定义后,在另外的一个.h文件里做extern声明后也可以,后来发现,这两个.h文件都没有自己的.c文件以及都是在工程文件的同层路径而不是在模块的文件里面。 2.ST Visual Develop 开发环境如果出现进入或者退出DEBUG很慢,或者菜单栏消失这类问题,就是工程文件出现了异常,只要新建工程或者把近期OK的工程文件拷过来替换掉即可,不过后者可能不彻底,建议用前者去解决。
[单片机]
STM8 定时器 TIM 中断进入不了
我用的是IAR编译器,昨晚弄了下STM8,发现跟STM32的风格挺像的,所以上手也很快。 今天弄了下TIM4定时器,中断死活进入不了,弄了好久,查了中断号、服务函数啥的,最后发现问题是: 我原来大意 直接复制过去的代码是 void TIM4_Init(void); IAR居然没给我报错。。搞发查了好久才发现问题,这条语句无法正常执行。
[单片机]
<font color='red'>STM8</font> 定时器 TIM 中断进入不了
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved