当前位置: 首页 > news >正文

printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);

/*无线通讯语言模块测试·PAST 2019 12 28 L298 CODE1871**/
              #include     <REG52.H>
              #include     <intrins.H>
              #include     "stdio.h"
              #define      uint unsigned int  
              #define      uchar unsigned char
              uchar        code tab[10]={0X03,0X9F,0X25,0X0D,0X99,0X49,0X41,0X1F,0X01,0X09};
              #define      CMD_IDLE    0         //空闲模式
              #define      CMD_READ    1         //IAP字节读命令
              #define      CMD_PROGRAM 2         //IAP字节编程命令
              #define      CMD_ERASE   3         //IAP扇区擦除命令
              #define      ENABLE_IAP  0x82      //if SYSCLK<20MHz
              #define      IAP_ADDRESS 0x0000    //EEPROM首地址
              typedef      unsigned char BYTE;
              typedef      unsigned int WORD;
              uchar        kcounter,kstatus;     //按键计数标志 按键状态标志
              uchar        v;                    /*从机号*/
              int          count;
              int          time=0;
              sbit         OUT1=P1^3;            /****输出***/
              sbit         CLK=P1^1;
              sbit         SDA=P1^0;
              sbit         KEY_ADD=P3^6;
              sbit         KEY_DEC=P3^7;
              sbit         KEY_SET=P1^4;
              sbit         KEY_ENTER=P3^3;
              sbit         INTPUT=P1^2;
              sbit         MD0MD1=P3^2;
              bit          Warning;
              uchar        Counter;
              void         delay(uint k);        /****延时****/
              uchar        DAT2=0;
              bit           Receive_Flag;
/*------------------------------------------*/
              void delay(uint t)
              {
              uint i,j;
              for(i=0;i<t;i++)
              for(j=0;j<10;j++);
              }
/*---------------延时子程序----------------*/
              void delay1 (uint ms)
              {
              uint i,j;
              for(i=0;i<ms;i++)
              for(j=0;j<200;j++)
              ;
              }    
/*----关闭IAP----------------------------*/
              void IapIdle()
              {
              IAP_CONTR=0;                       //关闭IAP功能
              IAP_CMD=0;                         //清除命令寄存器
              IAP_TRIG=0;                        //清除触发寄存器
              IAP_ADDRH=0X80;                    //将地址设置到非IAP区域
              IAP_ADDRL=0;
              }
/*-从ISP/IAP/EEPROM区域读取一字节-*/
              BYTE IapReadByte(WORD addr)
              {
              BYTE dat;                          //数据缓冲区
              IAP_CONTR=ENABLE_IAP;              //使能IAP
              IAP_CMD=CMD_READ;                  //设置IAP命令
              IAP_ADDRL=addr;                    //设置IAP低地址
              IAP_ADDRH=addr>>8;                 //设置IAP高地址
              IAP_TRIG=0x5a;                     //写触发命令(0x5a)
              IAP_TRIG=0xa5;                     //写触发命令(0xa5)
              _nop_();                           //等待ISP/IAP/EEPROM操作完成
              dat=IAP_DATA;                      //读ISP/IAP/EEPROM数据
              IapIdle();                         //关闭IAP功能
              return dat;                        //返回
              }
/*-写一字节数据到ISP/IAP/EEPROM区域-*/
              void IapProgramByte(WORD addr, BYTE dat)
              {
              IAP_CONTR=ENABLE_IAP;              //使能IAP
              IAP_CMD=CMD_PROGRAM;               //设置IAP命令
              IAP_ADDRL=addr;                    //设置IAP低地址
              IAP_ADDRH=addr>>8;                 //设置IAP高地址
              IAP_DATA=dat;                      //写ISP/IAP/EEPROM数据
              IAP_TRIG=0x5a;                     //写触发命令(0x5a)
              IAP_TRIG=0xa5;                     //写触发命令(0xa5)
              _nop_();                           //等待ISP/IAP/EEPROM操作完成
              IapIdle();
              }
/*---扇区擦除---------------*/
              void IapEraseSector(WORD addr)
              {
              IAP_CONTR=ENABLE_IAP;              //使能IAP val=IapReadByte(IAP_ADDRESS+1);
              IAP_CMD=CMD_ERASE;                 //设置IAP命令
              IAP_ADDRL=addr;                    //设置IAP低地址
              IAP_ADDRH=addr>>8;                 //设置IAP高地址
              IAP_TRIG=0x5a;                     //写触发命令(0x5a)
              IAP_TRIG=0xa5;                     //写触发命令(0xa5)
              _nop_();                           //等待ISP/IAP/EEPROM操作完成
              IapIdle();
              }
/*-----------------------------------------*/
              void red_eeprom(void)
              {
              uchar t_data,b_data;    //
              t_data=IapReadByte(IAP_ADDRESS);   //十位
              b_data=IapReadByte(IAP_ADDRESS+1); //个位
              v=t_data*10+b_data;
              }
/***************************************/              
              void write_eeprom(uchar dat)
              {
              uchar Tdata,Bdata;                 //
              Tdata=dat/10;
              Bdata=dat-Tdata*10;
              IapEraseSector(IAP_ADDRESS);       //扇区擦除      
              IapProgramByte(IAP_ADDRESS,Tdata); /*写入十位*/
              IapProgramByte(IAP_ADDRESS+1,Bdata);/*写入小数*/
              }             
/*------------------------------------------*/
              void ind_light_disp(uchar buff)    //点亮哪一位就置1
              {
              uchar j,sbuff;
              bit s;
              sbuff=buff;
               for(j=0;j<8;j++)                  //移动8位
               {
               s=sbuff&0x01;                     //位变量等于缓冲区最低位
                if(s==1)                         //最低位等于1
                {
                CLK=0;                           //此处与下面的CLK = 1结合产生一个上升沿
                SDA=0;
                CLK=1;
                }
                else
                {
                CLK=0;
                SDA=1;
                CLK=1;
                }
                delay(10);
                sbuff=sbuff>>1;                  //右移一次
               }
               delay(10);
              }
/*------------------------------------------*/
              void display(uchar val)
              {   
              uchar ss;                          /*缓冲*/
              ss=(tab[(val%100)/10]);            /*十位*/
              ind_light_disp(ss);
              ss=(tab[val%10]);                  /*个位*/
              ind_light_disp(ss);
              }
/******************************************/
              void key_reset()
              {
              kcounter=0;                        //计数器归零
              kstatus=0;                         //状态计数器归零
              delay1(5);
              }
/******************************************/
              void Key_ValAdd()
              {
              kcounter++;                        //按键计数器加一
              kstatus++;                         //按键状态标志加一
              delay1(5);
              }
/******************************************/
              void Key_Clear()
              {
              kcounter++;                        //按键计数器加一
              kstatus=0;                         //按键状态标志归零
              }
/*------------初始化串口---------------------*/
              void InitUart()
              {
              SCON=0X50;                         //8位数据,可变波特率
              AUXR|=0x01;                        //串口1选择定时器2为波特率发生器
              AUXR|=0X04;                        //定时器2时钟为Fosc,即1T
              T2L=0XE0;                          //设置定时器处置  110592》9600
              T2H=0XFE;                          //设置定时器处置  110592》9600
              AUXR|=0X10;                        //启动定时器2
              TI=1;
              EA=1;
              }
/*--------UART 中断服务程序----Buff=SBUF---------------*/
              void Uart() interrupt 4 using 1
              {
               if(RI)
               {
               DAT2=SBUF;                        //数组下标位置的数据等于j
               RI=0;                             //
               Receive_Flag=1;                     //接收数据标志置一
               }    
              }
/*------------------主循环程序----------------*/      
              void   main( )                     /*主程序开始*/
              {                                  /**加一**/
              AUXR=0X80;                         //STC系列的1T 设置
              TMOD=0X01;
              InitUart();                        //初始化串口
              ES=1;
              Receive_Flag=0;                     //接收到数据标志置零
              P1=255;
              red_eeprom();
              display(v);
              MD0MD1=0;                             //
              Warning=0;                         //报警标志等于0
              Counter=0;                         //报警计数器等于0
              //    printf("报警标志");
              printf("<Z>5");
              printf("<V>2");
              printf("<S>3");
              while(1)
              {
               key_reset();
               if(!KEY_ADD)                      //从机编号加
               {
                for(;kcounter<5;)                //按键循环5次
                {
                 if(!KEY_ADD)                    //按键低电平
                 {
                 Key_ValAdd();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!KEY_ADD)              //按键高电平
                 {
                 Key_Clear();                    //按键计数器加一    状态标志归零
                 }
                }
               if(kstatus>=3)                    /*按键状态标志大于等于3为有效值*/
               {  
               v++;   
               if(v>99)
               v=0;
               write_eeprom(v);
               display(v);
               delay1(10);
               }
              }

              key_reset();
              if(!KEY_DEC)                       //从机编号减
               {
                for(;kcounter<5;)                //按键循环5次
                {
                 if(!KEY_DEC)                    //按键低电平
                 {
                 Key_ValAdd();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!KEY_DEC)              //按键高电平
                 {
                 Key_Clear();                    //按键计数器加一    状态标志归零
                 }
                }
                if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
                {  
                v-=1;   
                if(v<1)
                v=99;
                write_eeprom(v);
                display(v);
                delay1(10);
                }
               }

               key_reset();
               if(!KEY_SET)                      //数据发送
               {
                for(;kcounter<5;)                //按键循环5次
                {
                 if(!KEY_SET)                    //按键低电平
                 {
                 Key_ValAdd();                   //按键低电平 计数器加一状态标志加一
                 }
                 else if(~!KEY_SET)              //按键高电平
                 {
                 Key_Clear();                    //按键计数器加一    状态标志归零
                 }
                }
                if(kstatus>=3)                   /*按键状态标志大于等于3为有效值*/
                {  
                display(2);
                printf("不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾");
               // printf("Please input up,dowm,high:\r\n");
                OUT1=0;
                delay1(2000);
                delay1(2000);
                OUT1=1;
                display(9);
                }
               }

              }
             }

相关文章:

printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);

/*无线通讯语言模块测试PAST 2019 12 28 L298 CODE1871**/ #include <REG52.H> #include <intrins.H> #include "stdio.h" #define uint unsigned int #defi…...

JAVA小案例-分别计算100以内奇数和偶数的和

JAVA小案例-分别计算100以内奇数和偶数的和 没啥可说的&#xff0c;就是for循环加if分支&#xff0c;也可以用while写。 代码如下&#xff1a; public class Jiouhe {/*** 分别计算100以内奇数和偶数的和* param args*/public static void main(String[] args){int sum10;in…...

头歌初识redis答案

头歌初识Redis的答案可以从多个方面进行归纳和总结。以下是根据参考文章提供的信息&#xff0c;按照清晰、分点表示和归纳的方式给出的答案&#xff1a; 一、Redis基础知识 Redis有16个数据库&#xff0c;默认使用第0个数据库&#xff0c;可以用select命令进行切换。 Redis是…...

Linux.小技巧快捷键

1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中&#xff0c;使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…...

传统的老程序员转向人工智能需要准备好这三件事情,你知道吗?

前言 人类文明的进步有时候快的吓人&#xff0c;在我们父辈上街买菜还是以一毛为计量买菜的时代&#xff0c;其实过去了也没有多长时间。现在买菜接近10块为准了&#xff0c;正常在集市上喊着怎么卖&#xff1f;摊主喊着三斤&#xff0c;包含的意思是10块钱三斤。相隔这么多年…...

ICPC2024 邀请赛西安站(7/8/13)

心得 [ICPC2024 Xian I] ICPC2024 邀请赛西安站重现赛 - 比赛详情 - 洛谷 7表示赛时ac了7个&#xff0c;8表示含补题总共ac数&#xff0c;13表示题目总数 题目 M. Chained Lights 打表&#xff0c;发现只有k1是YES //#include <bits/stdc.h> #include<iostream&…...

STM32f103实现按键长按 短按 双击

今天来分享一个使用EXIT外部中断加TIM计时器实现按键长短按以及双击操作&#xff0c;不过笔者在双击上有点瑕疵&#xff0c;就是当你按下双击第一下停顿几秒按第二下依然会识别为双击操作&#xff0c;笔者猜测只要板子不停电即便到第二天按下第二下依旧会识别双击操作&#xff…...

【WP】猿人学13_入门级cookie

https://match.yuanrenxue.cn/match/13 抓包分析 抓包分析发现加密参数是cookie中有一个yuanrenxue_cookie 当cookie过期的时候&#xff0c;就会重新给match/13发包&#xff0c;这个包返回一段js代码&#xff0c;应该是生成cookie的 <script>document.cookie(y)(u)(a…...

分享一款提取抖音小店商家电话的软件使用教程

抖音作为一款国内非常流行的短视频分享平台&#xff0c;吸引了大量用户和商家。许多商家在抖音上开设了小店&#xff0c;但是抖音并没有提供直接获取商家电话的功能。本文将分享一款提取抖音小店商家电话的软件&#xff0c;并附带使用教程和代码。 教程 步骤一&#xff1a;安…...

反转链表的三种方法--面试必考(图例超详细解析,小白一看就会!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&…...

Springboot注意点

1.Usermapper里加param注解 2.RequestParam 和 RequestBody的区别&#xff1a; RequestParam 和 RequestBody的区别&#xff1a; RequestParam 和 RequestBody 是Spring框架中用于处理HTTP请求的两个不同的注 get请求一般用url传参数&#xff0c;所以参数名和参数的值就在ur…...

数组和指针的联系(C语言)

数组和指针是两种不同的数据类型&#xff0c;数组是一种构造类型&#xff0c;用于存储一组相同类型的变量&#xff1b;而指针是一种特殊类型&#xff0c;专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外&#xff0c;其他情况下都表示的是首元素的…...

安全区域边界

文章目录 安全区域边界边界防护跨边界流量通过受控接口通信非法内联非法外联限制无线网络 访问控制启用基于白名单的访问控制策略优化访问控制表根据五元组控制根据会话状态控制根据应用协议和内容控制 入侵防范外部发起的攻击内部发起的攻击对新型攻击防范及时检测攻击行为 恶…...

力扣每日一题 6/6

2938.区分黑球与白球[中等] 题目&#xff1a; 桌子上有 n 个球&#xff0c;每个球的颜色不是黑色&#xff0c;就是白色。 给你一个长度为 n 、下标从 0 开始的二进制字符串 s&#xff0c;其中 1 和 0 分别代表黑色和白色的球。 在每一步中&#xff0c;你可以选择两个相邻的…...

游戏心理学Day05

第三章 游戏即学习 《超级马里奥》是游戏史上的经典之作&#xff0c;我们都记得第一次踩到敌人&#xff0c;第一次顶碎砖块时的快乐&#xff0c;也记得为了通过某个关卡而付出的努力和艰辛。当我们掌握了规律和技巧之后&#xff0c;这些难题就不再是难题&#xff0c;因为我们习…...

【C、C++编译工具】CLion工具介绍与安装

一、问题 最近突发奇想想学学最开始接触的语言C&#xff0c;之前大学的时候用的更多的工具还是VC&#xff0c;工作后慢慢接触了CLion&#xff0c;跟pycharm其实差不多&#xff0c;都是集成开发环境&#xff08;IDE&#xff09; 解释&#xff1a;什么是 IDE&#xff1f; 根据计…...

LabVIEW中进行步进电机的位置控制

在LabVIEW中进行步进电机的位置控制&#xff0c;通常涉及以下几个关键步骤&#xff1a;设置硬件、配置通信、编写控制算法和实施反馈控制。以下是一个详细的介绍。 硬件设置 步进电机&#xff1a;选择合适的步进电机&#xff0c;根据负载和应用需求选择适当的步数和转矩。 驱…...

目标检测-AnyLabeling标注格式转换成YOLO格式

Anylabel可以极大的增加数据的标注效率&#xff0c;但是其标注格式如何能转换成YOLO标注格式&#xff0c;具体内容如下所示。 关于AnyLabeling的其它详细介绍如下链接所示 https://blog.csdn.net/u011775793/article/details/134918861 Github链接 https://github.com/vietanhd…...

MongoDB管理内存使用

优化MongoDB内存使用&#xff0c;可以通过一下几点来降低系统内存占用&#xff0c;本次主要配置WiredTiger Cache来实现 WiredTiger Cache&#xff1a; MongoDB 使用 WiredTiger 存储引擎&#xff0c;其缓存使用最近最少使用 (LRU) 算法管理。频繁访问的数据会保留在内存中&am…...

【Elasticsearch】IK分词器的下载及使用

安装IK分词器 网址&#xff1a;https://github.com/infinilabs/analysis-ik 3.1.在线安装ik插件&#xff08;较慢,不推荐&#xff09; # 进入容器内部 es为容器名称 docker exec -it es /bin/bash# 在线下载并安装 7.17.21为镜像版本要与之前保持一致 ./bin/elasticsearch-pl…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...