
编程
文章平均质量分 64
wzk456
擅长嵌入式软硬件,MCU,VB,C#,C++
展开
-
C语言十大滤波算法
1、限幅滤波法方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效。如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值*函数名称:AmplitudeLimiterFilter()-限幅滤波法*优点:能有效克服因偶然因素引起的脉冲干扰*缺点:无法抑制那种周期性的干扰,且平滑度差*说明: 1、调用函数 GetAD(),该函数用来取得当前值 2、变量说明 Value:最近一次有效...转载 2022-03-15 07:26:10 · 4073 阅读 · 0 评论 -
HEX 文件的构成
Hex文件,打开后可发现,整个文件以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)。Hex文件可以按照如下的方式进行拆分来分析其中的内容:例如::020000040000FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA第一个 0x02 为数据长度。紧跟着后面的0x00 0x00 为地址。再后面的0x04为数据类...原创 2019-05-25 15:34:25 · 1153 阅读 · 0 评论 -
KEIL arm C51中常量变量函数的绝对地址设定
keil for arm中:staticconstuint8_ts_acBmpLogo030[len]__attribute__((at(0X800F000)))={0x80,0xC0,0xC0,0xC0,0xC0,0x80,xxxxxxx}案例演示下面我们用一个例子演示一下,比如:将一个全局变量放到0x20000000处;将一个const常量放置到0x0000100...原创 2019-05-20 16:00:06 · 7579 阅读 · 2 评论 -
STM8S IAR 中常量变量函数绝对位置设置
三种方法,举例如下:1.需要修改icf文件。#pragma location ="ConstSection1"__root __no_int char RELEASEDATE[16] @"ConstSection1";在icf文件中增加下面place at address mem:0x08001000 { readonly section ConstSection1 };注意:i...原创 2019-05-20 15:19:53 · 4469 阅读 · 0 评论 -
串口接收超时中断程序思路
方法0://通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.//如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接收到//任何数据,则表示此次接收完毕.//接收到的数据状态//[15]:0,没有接收到数据;1,接收到了一批数据.//[14:0]:接收到的数据长度u16 USART2_RX_STA=0; v...原创 2019-05-07 00:07:18 · 7340 阅读 · 0 评论 -
memset,strtr函数原型
void *memset(void *s, int c, size_t n){ char *s_func = (char *)s; if(NULL == s_func || 0 > n){ return NULL; } while(n--){ *s_func++ = c; } return s;}...原创 2019-04-26 18:27:52 · 1508 阅读 · 0 评论 -
给学弟答疑:结构体字节对齐,C语言结构体字节对齐详解
学弟最近咨询结构体的问题,这里给以详细解释:struct STUDENT{ char a; int b;}data;如上结构体变量 data 占多少字节?char 占 1 字节,int 占 4 字节,所以总共占 5 字节吗?我们写一个程序验证一下:# include <stdio.h>struct STUDENT{cha...转载 2019-03-05 00:06:58 · 1588 阅读 · 1 评论 -
strcpy strncpy strcmp strlen strcat函数
strcpy函数:char *strcpy(char *Dest , const char *Src){ assert((Dest != NULL) && (Src != NULL)); char *address = Dest; while((*Dest++ = *Src++) != '\0') NULL; return...转载 2019-02-26 14:21:49 · 430 阅读 · 0 评论 -
C语言常用排序算法---冒泡排序,选择排序,快速排序
冒泡排序:两两之间进行比较,把大的移到后面,每轮比较之后之后一个就是最大的#include<stdio.h>#include<assert.h>#include<stdlib.h.h>//从头向尾遍历//相邻两数进行比较//将最大数(相对)沉入尾部(相对)void BubbleSort1(int *arr,int sz){...原创 2019-02-26 14:01:31 · 784 阅读 · 0 评论 -
C语言经典著作导读
基础篇1.《写给大家看的C语言书(第2版)》点击打开链接 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: (美)Greg Perry [作译者介绍] 译者: 谢晓钢 刘艳娟 丛书名: 图灵程序设计丛书 C/C++系列 出版社:人民邮电出版社 ISBN:97871152163...原创 2019-02-20 14:09:28 · 664 阅读 · 0 评论 -
C#判断一个string是否为数字
方案二:正则表达式(推荐)using System.Text.RegularExpressions;a)public static bool IsNumeric(string value){ return Regex.IsMatch(value, @"^[+-]?\d*[.]?\d*$");}public static bool IsInt(string value...原创 2019-02-14 23:45:00 · 4936 阅读 · 1 评论 -
C# 中怎么将string转换成int型
int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可以,其中 1和3 需要try{}异常,2不需要。 TryParse() Usage1:int number;bool result = Int32.TryParse(value, ...转载 2019-02-14 23:41:37 · 4110 阅读 · 0 评论 -
C#中WinForm程序退出方法技巧总结
C#中WinForm程序退出方法技巧总结 一、关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下。 1.this.Close(); 只是关闭当前窗口,若...转载 2019-02-14 23:39:52 · 373 阅读 · 0 评论 -
c# 截取字符串
split的使用: 1. Split( Char ()) 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。 根据单个分隔字符用split截取。 例如 复制代码代码如下: string st="GT123_1"; string[] sArray=st.Split(‘_’);// 一定是单引 ...原创 2018-09-27 14:33:36 · 1464 阅读 · 0 评论 -
C# 窗体关闭时候的询问操作
// 窗体关闭时候的询问操作 /// /// /// private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { DialogResult result = MessageBox.Show("您确...原创 2018-08-22 16:56:23 · 1341 阅读 · 0 评论 -
c# chart
private void button1_Click(object sender, EventArgs e) { //using System.Windows.Forms.DataVisualization.Charting; // 设置曲线的样式 series = chart1.Series[0]; ...原创 2018-08-21 17:39:12 · 2651 阅读 · 0 评论 -
C# 利用ReportViewer生成报表
涉及知识点:ReportViewer :位于Microsoft.Reporting.WinForms命名空间, 主要用于报表的显示 Report:报表,以rdlc结尾的文件,可视化设计报表模板。 报表数据:内置字段,参数,图像,数据集(本报表主要使用参数,和数据集) ReportParameter:使用名称和值实例化新的报表参数 ReportDataSource:报表的数据源与Data...原创 2018-08-20 17:42:01 · 16236 阅读 · 2 评论 -
VS2017 C# WIN10 报表中文显示乱码
找了一圈办法,终于找到解决方案。点击rdlc表单元格,更改字体为宋体(其他中文字体应该也可以)。原创 2018-08-20 16:08:00 · 2208 阅读 · 0 评论 -
C# VS2017工具栏中没有Report Viewer的解决方案
选择“工具”》“Nuget包管理器”》“程序包管理器控制台”执行命令:Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms -Pre然后在视图》工具箱中点右键,选择“选择项”,在.net framework组建选项卡中选择“浏览”,然后在你的工程根目录下的“\packages\Microsoft.R...原创 2018-08-20 09:51:46 · 8525 阅读 · 2 评论 -
keil 局部变量不能查看值,显示为not in scope
用MDK调试一块STM32F207的程序,想查看一下变量却发现watch窗口总是<not in scope>和<cannot evaluate>,无奈凑合着通过printf函数进行串口打印查看。后来实在受不了,想了一下,觉得应该是编译器把这个局部变量给优化掉了,并没有在内存中生成,果断把优化级别改为Level 0,重新编译,解决。Getting the ...原创 2018-08-15 09:05:20 · 24290 阅读 · 3 评论 -
STM32 启动文件分析
;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_0000;然后在RAM中分配变量使用的堆;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配;分配完成后,再定义和实现相应的中断函数,;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在链接时用别处的地址进...原创 2018-08-10 14:42:29 · 467 阅读 · 0 评论 -
STM32 keil5编译优化
本来是写个IAP程序,Flash中只规划了4K字节,但是代码编写完后有6k,所以寻找优化方案,优化完在1.7k左右。STM32 keil5编译优化,可以勾选一下几项:1、Options for Taeget-->Target勾选使用微库 2、Options for Taeget-->Target①选择优化级别Level 3(-O3)②勾选One ELF ...原创 2018-08-10 09:09:03 · 2741 阅读 · 0 评论 -
LPC1700系列芯片内存注意问题
在AMR芯片中内存空间是越来越大了,而我们的使用需求也是水涨船高。而不同ARM芯片的内存分配也是截然不同。例如同样是64K的STM32,只要你的数组定义在64K内就可以操作的,而64K的LPC芯片则不能定义64K的数组。这个问题恐怕困扰了不少网友。产生这一问题的主要原因是不同芯片内存架构是不一样的。下面我们主要探讨一下LPC1768的内存空间是使用情况。 下图是LPC1...原创 2018-08-09 20:30:19 · 602 阅读 · 0 评论 -
12864点阵型液晶显示屏的基本原理与使用方法(很详细)
点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 ...原创 2018-06-26 17:58:39 · 99666 阅读 · 5 评论 -
LCD12864(带字库的)使用教程:
一、LCD12864简介LCD12864液晶显示,也就是屏幕上总共有128*64 ,个点,每个点就只有两种状态亮和不亮我这里使用的就是带字库的,直接可以显示中文,不需要自己去编码,发送数据使用8位并行模式。我这里不介绍怎么显示图片,不介绍指令,知识快速入门得到显示结果 二、引脚介绍1.一共有20个引脚,重要的只有那么几个3~VO就是调节对比度的,相当于调节每个点显示出来的深浅,虽然只有亮与不亮两种...原创 2018-06-26 17:56:28 · 14484 阅读 · 4 评论 -
LCD12864
一.概述点阵式液晶显示模块(LCD)广泛应用于单片机控制系统,比数码管、段式液晶能模块显示更多、更直观的信息,如汉字、曲线、图片等。点阵液晶显示模块集成度很高,一般都内置控制芯片、行驱动芯片和列驱动芯片,点阵数量较大的LCD还配置RAM芯片,带汉字库的LCD还内嵌汉字库芯片,有负压输出的LCD还设有负压驱动电路等。单片机读写LCD实际上就是对LCD的控制芯片进行读写命令和数据。编程驱动LCD时,不...原创 2018-06-26 17:53:20 · 2940 阅读 · 0 评论 -
如何用Proteus仿真8086
如何用proteus仿真8086材料:Emu8086(网上很多)Proteus8.4(版本过低没有8086)链接:https://pan.baidu.com/s/1nvgjblR密码:dafb破解汉化教程:https://jingyan.baidu.com/article/ed2a5d1f7c169c09f7be1761.html 一、在Proteus上完成原理图设计1. 文件→新建工程→(...转载 2018-06-25 13:27:36 · 7901 阅读 · 2 评论 -
如何在windows下使用masm和link对汇编文件进行编译
32位系统带有debug程序,可以进行汇编语言和exe的调试。但真正的汇编编程是“编辑汇编程序文件(.asm)->编译生成obj文件->链接生成exe文件”。下面,我就来说一下如何在windows下使用masm调试,使用link链接。1、下载相应软件 下载masm.exe和link.exe,并将其解压(移动)到自定义目录(比如我的是d:\dos 目录)个人分享地址:http://pan...原创 2018-06-25 13:19:20 · 3187 阅读 · 0 评论 -
Proteus Pro 8.7 SP3安装教程
1.本站下载压缩包,解压后先双击安装包P8.7.Sp3.exe安装,点下一步2.选择运行环境,点下一步3.进入安装界面,点下一步继续4.接受协议,点next5.选择我有一个 license key,也就是默认第一项6.继续点next7.进入key激活界面,我们选择压缩包Patch-2文件夹内的 license key文件(建议将此文件保存到一个不易被删除的地方)8.默认,继续点next9.选择完整...原创 2018-06-25 09:57:30 · 71886 阅读 · 3 评论 -
keil与proteus联调方法如下
keil与proteus联调方法如下1.把VDM51.dll(没有的请到网上下载) 复制到proteus安装目录的MODELS文件夹下,我的是C:\Program Files\Labcenter Electronics\Proteus 7Professional\MODELS\目录下,再复制一个到C:\keilC\C51\BIN目录下(keil的安装目录),2.修改keil安装目录下Tools.i...原创 2018-06-25 09:53:44 · 46191 阅读 · 8 评论 -
keil和Proteus联动调试
如何实现Keil C和Proteus的联动调试:我的keil安装目录为:D:\Tool_engineer\KEIL4Proteus安装目录为:D:\Tool_engineer\proteus(1)将D:\Tool_engineer\proteus\MODELS\VDM51.dll 复制到keil的目录D:\Tool_engineer\KEIL4\C51\BIN中。如果发现没有VDM51.dll可到...原创 2018-06-25 09:52:32 · 16178 阅读 · 5 评论 -
C#跨线程调用控件
在C#应用程序开发中,我们经常需要把UI线程和工作线程分开编程,为了防止界面停止响应。同时,我们也需要在工作线程中去更新UI界面的控件,在CLR的线程安全中并不允许我们直接在工作线程操作UI界面。因此,介绍以下三种方式进行跨线程操作UI。 第一种方法:使用delegate和invoke来从其他线程中调用控件 private void button2_Click(object send...原创 2018-06-21 18:03:25 · 422 阅读 · 0 评论 -
C#C#中SerialPort类中DataReceived事件GUI实时处理方法
MSDN:从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,必须使用 Invoke 回发更改请求,这将在正确的线程上执行.进而要想将辅助线程中所读到的数据显示到主线程的Form控件上时,只有通过...原创 2018-06-21 17:56:55 · 5092 阅读 · 0 评论 -
C#串口SerialPort常用属性方法
.BaudRate;获取或设置波特率.BytesToRead;得到 接收到数据的字节数.BytesToWrites;得到送往串口的字节数.DataBits;获取或设置数据位.IsOpen;获取一个值,判断串口是否打开.Pariy;获取或设置校验位.PortName;串口名称.ReadBufferSize;获取或设置读取数据的缓存大小.ReadTimeout;读取超时时间.StopBits;停止位....原创 2018-06-21 17:38:06 · 1081 阅读 · 0 评论 -
如何知道当前电脑有哪个串口
在窗体上添加一个comboBox控件。然后使用comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); 或者 string[] portList = System.IO.Ports.SerialPort.GetPortNames(); for (int i = 0; i < portLis...原创 2018-06-21 17:36:13 · 2584 阅读 · 0 评论 -
C#跨线程操作控件的线程安全方法
C#跨线程操作控件的线程安全方法在C#中,经常用到这样一个场景,Windows Form程序启动一个工作者线程执行一部分工作,这样做是为了避免速度慢的工作如果直接调用会使得主Form停止响应一段时间。既然启动了线程,就避免不了线程之间数据传递的事情,相信你有很多种办法能解决,总之注意同步和互斥操作就好。我想说的是,工作线程处理中可能想操作某个主线程的Windows Form的Control,比如按...原创 2018-06-21 17:35:14 · 354 阅读 · 0 评论 -
C# Winform 跨线程更新UI控件常用方法汇总
概述C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常。处理跨线程更新Winform UI控件常用的方法有4种:1. 通过UI线程的SynchronizationContext的Post/Send方法更新;2. 通过UI控件的Invoke/BeginInvoke方法更新;3. 通过BackgroundWorker取代T...原创 2018-06-21 17:33:58 · 220 阅读 · 0 评论 -
[STAThread]
[STAThread]是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。[STAThread]是声明开始线程用的。有时候要用一个第三方组件,如果不加[STAThread]的话,组件上有一些功能是无法使用的。加上[STAThread]就可以用了。...原创 2018-06-19 15:43:40 · 2010 阅读 · 0 评论 -
.net reflector反编译破解软件
头几篇文章似乎有点划水,最近项目考虑到软件安全性,于是自己尝试了一下反编译公司软件,居然成功了,中间踩了一些坑,看到网上很多博文都是复制粘贴,还缺少步骤,因而写下这篇博客。 .net reflector是一款很强大的反编译工具,只限于.NET平台的反编译,这里安装及破解过程跳过,直接从破解软件的步骤开始吧,这里我安装的版本是8.3.3.115,安装后左边程序集列表中,会默认添加一些....原创 2018-06-13 23:51:06 · 5602 阅读 · 0 评论 -
.NET Reflector反编译的方法
首先启动.NET Reflector,然后添加进入dll或exe。然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录。 到这一步骤时,稍等一会,就能够在指定目录就能够看到反编译出来的项目文件了 如果此时你注意的话,发现我们反编译出来的代码是没有.sln文件的。 所以,我们需要在Vs里新建一个空项目,然后将反编译出来的项目文件包含进空项目中。 ...原创 2018-06-13 23:20:14 · 5496 阅读 · 0 评论