两个输入信号同时输入判断

/*******两个输入信号同时输入判断,2019 4 6**********/
/*******桥架机AB系统拉拔选择其中一个先拉进位置*****/
/***AB都在等待区A先前进,B在等待区A在中间B先前进****/
/***其中一个不在等待区拉拔后退PAST L259 CODE640****/
               #include      <REG52.H>
               #include      <intrins.H>
               #define       uint unsigned int  
               #define       uchar unsigned char
               uchar         code disdt[11]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xa3};
               sbit          CS=P1^2;             //  12864PIN4     vala显示缓冲valb加减时间处理缓冲
               sbit          SID=P1^3;           //     12864PIN5
               sbit          SCLK=P1^4;             //     12864PIN6
               sbit          key1=P3^2;         //     设置按键
               sbit          key2=P1^7;         //
               uchar         k;
               uchar         kcounter;             //按键计数器
               uchar         counter;              //手动按键检测计数器
               uchar         kstatus;              //状态寄存器
               bit           A_Flag;               //A按键按下标志
               bit           B_Flag;               //B按键按下标志
               bit           Chuange_Flag;           //按键输入更新标志
               uchar         AB_Flag;               //按键输入编号标记
/*------------------延时子程序------------------------*/
               void delay(unsigned int t)
               {
                uint i,j;
                for(i=0;i<t;i++)
                for(j=0;j<500;j++);
               }
/*------------------延时子程序------------------------*/
               void delay_1ms(uint x)
               {
               int i, j;
               for(i=0;i<x;i++)
               for(j=0;j<1500;j++);
               }                
/****************按键计数器状态寄存器归零*************/
               void RstKey()
               {
               kcounter=0;                       //按键计数器归零
               kstatus=0;                        //状态寄存器归零
               }
/*****************按键低电平检测函数*****************/
               void   LowVoltKey(void)           //按键计数器状态标志加一
               {
               kcounter++;                       
               kstatus++;     
               delay(10);                        //延时                  
               }
/*****************按键高电平检测函数*****************/
               void    HighVoltKey(void)         //按键计数器加一 状态标志归零
               {
               kcounter++;                       //按键计数器加一
               kstatus=0;                        //按键状态标志归零
               delay(10);                        //延时
               }
/*------------------写命令到LCD-----------------------*/
               void write_com(unsigned char cmdcode)
               {
               uchar i;
               uchar i_data,temp_data1,temp_data2;
               EA=0;
               i_data=0xf8;
               delay_1ms(10);
               CS=1;
               SCLK=0;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               i_data=cmdcode;
               i_data&=0xf0;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               i_data=cmdcode;
               temp_data1=i_data&0xf0;
               temp_data2=i_data&0x0f;
               temp_data1>>=4;
               temp_data2<<=4;
               i_data=temp_data1|temp_data2;
               i_data&=0xf0;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               CS=0;
               EA=1;
               }
/*-------------------写数据到LCD----------------------*/
               void write_data(unsigned char Dispdata)
               {
               uchar i;
               uchar i_data,temp_data1,temp_data2;
               EA=0;
               i_data=0xfa;
               delay_1ms(10);
               CS=1;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               i_data=Dispdata;
               i_data&=0xf0;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               i_data=Dispdata;
               temp_data1=i_data&0xf0;
               temp_data2=i_data&0x0f;
               temp_data1>>=4;
               temp_data2<<=4;
               i_data=temp_data1|temp_data2;
               i_data&=0xf0;
                for(i=0;i<8;i++)
                {
                SID=(bit)(i_data&0x80);
                SCLK=0;
                SCLK=1;
                i_data=i_data<<1;
                }
               CS=0;
               EA=1;
               }
/*------------------初始化LCD屏-----------------------*/
               void lcd_init()
               {
               uchar comdata;
               delay_1ms(100);
               comdata=0x30;
               write_com(comdata); /*功能设置:一次送8位数据,基本指令集*/
               comdata=0x04;
               write_com(comdata); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
               comdata=0x0f;
               write_com(comdata); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
               comdata=0x01;
               write_com(comdata); /*清DDRAM*/
               comdata=0x02;
               write_com(comdata); /*DDRAM地址归位*/
               comdata=0x80;
               write_com(comdata); /*把显示地址设为0X80,即为第一行的首位*/
               }
/***********************************/
               void ABpositionCalculation()
               {
               Chuange_Flag=0;                     //复位更新标志
               if(A_Flag==0&&B_Flag==0)            // 0 0
               AB_Flag=1;
               else  if(A_Flag==0&&B_Flag==1)    // 0 1
               AB_Flag=2;
               else  if(A_Flag==1&&B_Flag==0)    // 1 0
               AB_Flag=3;
               else  if(A_Flag==1&&B_Flag==1)    // 1 1
               AB_Flag=4;
               A_Flag=1;
               B_Flag=1;
               }
/***********************************/
               void Dis_Lcd()
               {
                if(AB_Flag==1)
                {
                write_com(0X82);
                write_data(0xA3);                /**/
                write_data(disdt[1]);            /**/
                }
                else if(AB_Flag==2)
                {
                write_com(0X82);
                write_data(0xA3);                /**/
                write_data(disdt[2]);            /**/
                }
                else if(AB_Flag==3)
                {
                write_com(0X82);
                write_data(0xA3);                /**/
                write_data(disdt[3]);            /**/
                }
                else if(AB_Flag==4)
                {
                write_com(0X82);
                write_data(0xA3);                /**/
                write_data(disdt[4]);            /**/
                }
               }
/*------------------主循环程序----------------*/      
               void   main( )                    /*主程序开始*/
               {
               delay(5000);
               lcd_init();                       /*液晶复位*/
               A_Flag=1;                         //A输入信号
               B_Flag=1;                         //B输入信号
               Chuange_Flag=1;                     //更新标志
               while(1)
               {
                RstKey();
                for(;kcounter<5;)                //按键循环5次
                {
                 if(!key1)                       //低电平
                 {
                 LowVoltKey();                   //按键计数器状态标志加一
                 }
                 else if(~!key1)                 //按键高电平
                 {
                 HighVoltKey();                  //按键计数器加一 状态标志归零
                 }
                 if(kstatus>=3)  
                 {
                 Chuange_Flag=1;
                 A_Flag=0;
                 write_com(0X92);
                 write_data(0xA3);               /**/
                 write_data(disdt[1]);           /**/
                 }
                }
                RstKey();
                for(;kcounter<5;)                //按键循环5次
                {
                 if(!key2)                       //低电平
                 {
                 LowVoltKey();                   //按键计数器状态标志加一
                 }
                 else if(~!key2)                 //按键高电平
                 {
                 HighVoltKey();                  //按键计数器加一 状态标志归零
                 }
                 if(kstatus>=3)  
                 {
                 Chuange_Flag=1;
                 B_Flag=0;
                  write_com(0X93);
                 write_data(0xA3);               /**/
                 write_data(disdt[2]);           /**/
                 }
                }
                if(Chuange_Flag==1)                 //更新标志等于1,有键按下更新计算和显示
               {
                ABpositionCalculation();         //计算
                Dis_Lcd();                         //显示
               }
               }
              }                                     //L259 CODE640

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一个轻量级适合阅读的优秀C++开源项目

1. 问题2. 推荐理由3. 项目官方介绍 3.1. Source code3.2. Overview3.3. Library Features3.4. Testing Platforms3.5. Related Documents3.6. 源码仓库3.7. 概述3.8. 设计特点3.9. 已验证的平台3.10. 相关文档 1. 问题 在知乎上看到一个问题 有哪些轻量级适合阅读的优秀 C …

C语言实现动态栈

#include<stdio.h> #include<stdlib.h> #include<stdbool.h>// 每一个节点的数据类型 typedef struct Node {int data;struct Node * pNext; }NODE, * PNODE; // NODE等价 struct Node PNODE等价于 struct Node *// 栈 typedef struct Stack {PNODE pTop;P…

【数据库编程-SQLite3(一)】sqlite3数据库在Windows下的配置及测试

学习分析 1、资源准备2、环境配置2.1、将资源包下载解压缩保存。2.2、在QT中创建工程,配置环境 3、测试配置3.1、 sqlite3_open函数3.2、sqlite3_close函数3.3、代码测试 1、资源准备 资源包 2、环境配置 2.1、将资源包下载解压缩保存。 解压缩得到以下文件 2.2、在QT中创建…

力扣每日一题 6/13 反悔贪心算法

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2813.子序列最大优雅度【困难】 题目&#xff1a; 给你一个长度为 n 的二…

上海2024年二手房最新成交历史数据

标签: 上海2024年二手房最新成交历史数据; 二手房; 时间: 2024年 上海市4月二手房网签套数:18230套 上海市5月二手房网签套数:19396套 上海市6月二手房网签套数: 6月1日:924套 6月2日:886套 6月3日:720套 6月4日:750套 6月5日:823套 6月6日:902套 6月7日:968套…

红黑树的基本概念

红黑树 特征 [1] 根节点是黑色的[2] 每个叶子节点都是黑色的空节点(NIL), 也就是说&#xff0c;叶子节点不存储数据[3] 任何相邻的节点都不能同时为红色&#xff0c;也就是说&#xff0c;红色节点是被黑色节点隔开的[4] 每个节点&#xff0c;从该节点到达其可达叶子节点的所有路…

阿里云香港服务器怎么样?

大家都知道阿里云是国内最受欢迎的云服务商&#xff0c;那么阿里云香港服务器究竟怎么样呢&#xff1f;和硅云的香港服务器用于做外贸网站等业务相比各有哪些优缺点呢&#xff1f; 阿里云和硅云在香港云服务领域有着广泛的应用和良好的口碑。然而&#xff0c;它们各自的特点和…

mysql如何存储ip地址

在MySQL中存储IP地址通常可以使用 VARCHAR 或 CHAR 类型来存储。IP地址在IPv4的情况下通常是点分十进制的形式&#xff0c;例如 192.168.1.1&#xff0c;可以用 VARCHAR(15) 来存储&#xff0c;因为IPv4最多15个字符&#xff08;包括点号&#xff09;。如果你需要支持IPv6地址&…

【V8引擎】 V8引擎如何运行JS的

文章目录 概要什么是V8引擎为什么需要V8引擎比较常见的javascript引起有哪些呢&#xff1f;V8引擎是如何工作的&#xff08;V8引擎的解析过程&#xff09;V8引擎的做了哪些优化 概要 本篇文章主要是讲V8引擎如何运行JS&#xff0c;对运行JS做了哪些优化 什么是V8引擎 V8 是一…

深入探究Java Character类:全面解析与应用实例

在Java编程中,Character类是一个用于操作单个字符的强大工具。作为Java标准库中的一部分,Character类封装了基本数据类型char,并提供了一系列方法来操作和检查字符属性,例如字母、数字、空白字符等。理解并熟练使用Character类对开发高效、可靠的Java应用程序至关重要。本文…

开发做前端好还是后端好?

目录 一、引言 二、两者的对比分析 技能要求和专业知识&#xff1a; 职责和工作内容&#xff1a; 项目类型和应用领域&#xff1a; 就业前景和市场需求&#xff1a; 三、技能转换和跨领域工作 评估当前技能&#xff1a; 确定目标领域&#xff1a; 掌握相关框架和库&a…

按键输入消抖

按键输入是人机对话不可缺少的一部分&#xff0c;对于消抖设计&#xff0c;一种是软件消抖&#xff0c;一种是硬件消抖。但在单片机电路设计中&#xff0c;采用电容消抖才是最佳的选择&#xff0c;其次才是定时器消抖。 1、按键输入采用软件消抖 1)、通过定时器方式定时读取按…

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式&#xff08;createWebHashHistory /createWebHistory &#xff09;和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式&#xff1a;url不带#号&#xff0c;需要后端做url适配 适合销售项目 利于seo crea…

【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析

1.离群点可以是合法的数据对象或者值。( ✓) 解析&#xff1a;离群点&#xff08;Outliers&#xff09;通常是与数据集中其他数据显著不同的数据点&#xff0c;但它们可以是合法的数据值。这些值可能是由于测量误差、数据录入错误、数据分布的自然属性等原因产生的。 3.关联规…

Spring框架的原理及应用详解(六)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;随着应用复杂性的不断增加和技术的快速发展&#xff0c;传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此&#xff0c;开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

[DDR4] DDR4 相对 DDR3差异与优势

依公知及经验整理,原创保护,禁止转载。 传送门: 总目录 1 差异总览 出处: https://www.kingston.com.cn/en/memory/ddr4-overview Description 描述DDR3DDR4Advantage 优势电压1.5V1.2V降低内存功耗需求容量512Mb-8Gb4Gb-16Gb更大的 DIMM 容量数据速率800Mb/s – 2133Mb/s1…

C#——结构和类问题总结

C#——结构和类问题总结 前言一、结构体是什么&#xff1f;1&#xff09;定义2&#xff09;特点 二、类&#xff08;对象&#xff09;是什么&#xff1f;1&#xff09;定义2&#xff09;特点 三、两者的差异性与选择环境&#xff1f;1&#xff09;差异性2&#xff09;选择环境 …

推荐一款WPF绘图插件OxyPlot

开始 使用 NuGet 包管理器添加对 OxyPlot 的引用(如果要使用预发布包,请参阅下面的详细信息)向用户界面添加PlotView在代码中创建一个PlotModel绑定到你的属性PlotModelModelPlotView例子 您可以在代码存储库的文件夹中找到示例。/Source/Examples NuGet 包 最新的预发布包由…

前端工程师不是软件工程师?

在当前的技术生态系统中&#xff0c;前端工程师与软件工程师这两个角色经常被混淆。尽管它们在某些方面有重叠&#xff0c;但实际上存在显著的差异。尤其是在前端工程师培训班出身的背景下&#xff0c;这种差异更为明显。本文将探讨为什么前端工程师不应被简单地归类为软件工程…

CyberDAO:引领Web3时代的DAO社区文化

致力于Web3研究和孵化 CyberDAO自成立以来&#xff0c;致力于推动Web3研究和孵化&#xff0c;吸引了来自技术、资本、商业、应用与流量等领域的上千名热忱成员。我们为社区提供多元的Web3产品和商业机会&#xff0c;触达行业核心&#xff0c;助力成员捕获Web3.0时代的红利。 目…