C语言版ET6218R按键检测程序源代码

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

MCU:AT89C52 编译环境:Keil C

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

#include

#include

#include

#define uint8 unsigned char

#define uint16 unsigned int

sbit DIO=P1^0;//端口定义

sbit CLK=P1^1;

sbit STB=P1^2;

uint8 dat_temp1;//按键接收数据暂存变量

uint8 dat_temp2;//按键接收数据暂存变量

/*********************自己添加一个微秒级延迟******************************/

void _delay_us(uint16 z)//延迟z微秒

{

uint16 i,j;

for(i=z;i>0;i--)

for(j=510;j>0;j--);

}

/**********************驱动程序*********************************/

void write(uint8 data_byte)//写一个字节

{

uint8 j;

STB=0;

for(j=0;j<8;j++)

{

if(data_byte&0x01)

{

DIN=1;

}

else

{

DIN=0;

}

CLK=0;_delay_us(2);

data_byte=data_byte>>1;

CLK=1;_delay_us(2);

}

_delay_us(1);

}

/******************************按键读取**********************************

****************************2个按键同时检测**************************

命令2:读键扫描数据 注:先读出的第一位是b0位.示意图见datasheet

按键硬件连接;

K1SG1/KS1

K1SG2/KS2

通过datasheet,可以确定要读出4个字节(按键按下时相应位变为1,直到松开按键)

以下按键程序是同时读出RAM中4个字节,第1个字节就是所要的数据。

按照datasheet中的图表,可以知道2个按键同时按下时的字节为0x05

注;字节排序按照b0位在最低位,这个要和读取数据时的移位顺序相对应。

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

void read_date()

{

uint8 i;

uint8 receive_dat1;//接收数据变量

uint8 receive_dat2;

uint8 receive_dat3;

uint8 receive_dat4;

//nop_();延迟1uS

for(i=0;i<8;i++)//读取第一个字节

{

CLK = 1;_delay_us(2);

CLK = 0;_delay_us(2);//下降沿读取数据

if(DIO)

receive_dat1 = (receive_dat1>>1)|0x80;//左移b0到最低位

else

receive_dat1 = receive_dat1>>1;

}

for(i=0;i<8;i++)//读取第二个字节

{

CLK = 1;_delay_us(2);

CLK = 0;_delay_us(2);//下降沿读取数据

if(DIO)

receive_dat2 = (receive_dat2>>1)|0x80;

else

receive_dat2 = receive_dat2>>1;

}

for(i=0;i<8;i++)//读取第三个字节

{

CLK = 1;_delay_us(2);

CLK = 0;_delay_us(2);//下降沿读取数据

if(DIO)

receive_dat3 = (receive_dat3>>1)|0x80;

else

receive_dat3 = receive_dat3>>1;

}

for(i=0;i<8;i++)//读取第四个字节

{

CLK = 1;_delay_us(2);

CLK = 0;_delay_us(2);//下降沿读取数据

if(DIO)

receive_dat4 = (receive_dat4&gt

;>1)|0x80;

else

receive_dat4 = receive_dat4 >> 1;

}

STB=1;//**********************读完数据后拉高

dat_temp1 = receive_dat1;//第一个

c语言暂存按键数据变量,ET6218R按键检测程序相关推荐

  1. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示

    目录 结构化数据表示 一.内存地址: 二.全局变量和局部变量的内存布局 三.数据在内存中的表示 四.数组在内存中的表示 五.字符串在内存中的表示 六.结构和联合在内存中的表示 结构化数据表示 一.内存 ...

  2. Settings.System暂存/读取数据

    在android应用开发的时候,有时候需要要保存一些变量的值,有好几种方法(SharedPreference/DataBase/...),这里就介绍其中一种,保存到系统数据库中. 这种处理方式有一定的 ...

  3. 博客项目--隐藏域的使用(暂存目标数据的id信息)

    隐藏域个人理解:有那么一块我们看不见但是又可以存放数据的地儿. 应用领域: 页面中删除某个数据,弹出提示框["确认要删除这条数据吗?"  确定删除    取消] 点击"确 ...

  4. 同时存多个变量缓存 微信小程序_微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解...

    微信小程序 缓存 关于本地缓存 1.wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage( ...

  5. 同时存多个变量缓存 微信小程序_CPU缓存一致性协议MESI,memory barrier和java volatile...

    MESI协议 MESI协议是一个被广泛使用的CPU缓存一致性协议.我们都知道在CPU中存在着多级缓存,缓存级别越低,容量就越小,速度也越快.有了缓存,CPU就不需要每次都向主存读写数据,这提高了CPU ...

  6. 图像haar特征提取 c语言,基于C语言的特征点提取程序 本程序是利用C语言对各种信号数据的特征点提取程序 - 下载 - 搜珍网...

    基于C语言的特征点提取程序\修改后 特征点提取程序\提取特征点\Debug\football.ilk 基于C语言的特征点提取程序\修改后 特征点提取程序\提取特征点\Debug\football.ob ...

  7. Git 常用操作(1)- 配置、查看、添加、暂存和提交

    1. Git 基本概念 Git 有三种状态:已提交(committed).已修改(modified)和已暂存(staged). 已提交:表示数据已经安全的保存在本地数据库中. 已修改:表示修改了文件, ...

  8. Git三大特色之Stage(暂存区)

    这是开篇 有人说,暂存区是 Git 最精彩的设计,同时也是最难理解的部分,两者我都感觉不太明显,但当我想写关于暂存区的理解后,发现的确不怎么好讲,这个玩意,有点只可意会的感觉,用 Git 用熟练了,很 ...

  9. git--工作区、暂存区、本地仓库、远程仓库

    原文网址:git--工作区.暂存区.本地仓库.远程仓库_IT利刃出鞘的博客-CSDN博客 ​​​​​​​​​​​​​​简介         本文介绍git的各个区:工作区.暂存区.本地仓库.远程仓库. ...

  10. git 暂存当前分支修改,切换到别的分支

    收藏,原文链接Git学习记录-git保留/丢弃当前分支修改并切换至其他分支 - 爱写bug的程序员 - 博客园 (cnblogs.com) 笔者在本地终端进行 git 工作目录的相关处理时,遇到由于某 ...

最新文章

  1. mysql七个模块_mysql(pymysql模块的使用,视图,触发器)
  2. OpenNebula 入门安装配置
  3. 关于Exception类
  4. 戴尔服务器设置文件存储,DELL服务器RAID配置详细教程-20210730001009.pdf-原创力文档...
  5. System.Threading.Timer使用心得
  6. python答疑的作用_不学Python之集中答疑(5)
  7. 读书笔记2014第13本:《富爸爸,穷爸爸》
  8. 数据库索引如何工作?原理
  9. 微信拉黑和删好友,哪个更绝情?
  10. 输入汉语星期几输出英文c语言程序,C根据英文星期获取对应汉字或数字的星期函数(1)...
  11. 【Linux】监控实时网速 查看实时网速
  12. 济南商讯在线计算机,迅时IP话机 NRP2000W
  13. 天才基本法--裴之的“自动战棋“代码
  14. 如何让本地局域网的Windows DNS服务器正确解析域名
  15. 将H264码流打包成RTP包
  16. 华为NBlot物联网学习内
  17. CAD中用多重插入块加密的图纸怎么分解?
  18. arch linux 安装xfce_Arch Linux 安装、配置、美化和优化
  19. 达观智能RPA机器人助力完善医疗行业信息化建设,解放医疗资源
  20. 2022年电工低压电工作业(应急管理厅)考前模拟卷及答案

热门文章

  1. 数据挖掘知识图谱(大数据分析师)
  2. MSP---企业上云需要考虑的问题
  3. java从Swagger Api接口获取数据工具类
  4. 【matlab】在图中插入矩形(框or阴影)
  5. 敏捷开发-srcum
  6. [No000094]SVN学习笔记4-版本库概念与部分日常操作
  7. Gvim 在进行文件对比时报cannot read or write temp files
  8. 未能找到类型名称MembershipProvider
  9. JavaScript遍历DOM
  10. .NET企业级应用架构设计的技术选型