自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 一时半会还不能理解的内容的记录

一、蜂鸣器3,没理解。二、RTC DS1302 中,关于如何把低位移到高位的位操作,没有理解: for (i=0; i<8; i++) { dat = DIO; //这里要注意,在上一个for循环结束后,DS1302已经把数据放到IO口上了 dat |= ( dat << i ); //暂时不理解,这个按拉或运算 SCLK = 1; SCLK = 0; //下降沿读取数据 delay (); }...

2020-12-06 15:39:13 412

原创 C语言题目4_把字符串里的不同的字符找了来

题目:在一个字符串中找到第一个只出现一次的字符。如输入st[] =“abccadeff”,则输出b//思路:使用双层for循环,把st[i]与st[i+1]相比#include <stdio.h>char st[] ="abccadeff"; int main(void){ int i, j, cnt; for (i=0; i< sizeof(st)/sizeof(char)-1; i++) //数组是从0开始的,所以要-1 { for(j=1; j&lt

2021-01-03 20:22:02 600

原创 C语言题目3_冒泡排序之自由升降序

题:在一个数组中,有选择的执行时升级排序还是降级排序,指令1:升级排序指令2:降级排序界面:让用户输入一串数字,作为数组的来源内部计算之后,让用户输入1则升序、输入2则降序实现方法:保存数组对数据进行冒泡排序#include <stdio.h> int num[5];void get_data(void);int get_sort_cmd(void);void sort_data(int cmd);void printf_data(void);int

2021-01-03 13:23:32 330

原创 C语言题目_2 (for循环的内外层嵌套)

打印下图在使用循环嵌套打印多行数据时,由于打印方式是从上向下、从左向右。因此,通常行数使用外循环,行内使用内循环。对于上图中每一行中元素的个数是一定的,这种独立的,这种实现就简单了:思路:使用两个变量:i 控制行数,j 控制行里的个数。i 、j 彼此独立:#include <stdio.h>int main(void){ int i, j; for (i=0; i<5; i++) //决定多少行 { for (j=0; j<5; j++) //每一.

2021-01-03 11:18:18 1852

原创 C语言题目_1:三天打鱼两天晒网

题 目:某人从1990年1月1号开始三天打鱼,两天晒网,问今天他在打鱼还是晒网?提示:闰年:能被4整除且不能被100整除 或者 能被400整除的年份all_days = from_1990_to_year_days + sum_month + date - 31; //得到总天数。31是1900.0.0-1990.1.1的起始。上面这个计算不合理,属于投机取巧了:因为如果不是从1.1号开始计算,而是从1.11这种时间开始计算,这个计算方式就不对了。先暂时记录着,以后看再回来修改。int year

2020-12-28 10:50:55 716

原创 NEC协议红外按键

红外遥控器发送的载波频率:38kHz。要注意的是,红外接收器接到的高低电平可能是相反的(要看具体的硬件电路)红外按键本来就是一直发出38kHz的频率出来,只是有一段时间不发而已。根据这段没有载波的时间的长短来分别出1、0两种信号。所以,根据脉冲时间的长短来解码。协议引导码 + 地址码 + 地真码反码 + 命令码 + 命令码反码...

2020-12-22 15:11:46 608

原创 温度传感器,ds18b20

看老师的教程,再看规格书,自己写了ds18b20的时序,还是跟以前的学习一样,写出来的代码是有问题的,经过了debug,发现在还是在位操作上写借了代码,byte = (7 << tmp) | (byte >> 1),应该是byte = (tmp << 7) | (byte >> 1);以致于读取不到ds18b20传过来的温度数据。基础不牢,地动山摇。先把这一季的视频学会,再回头把C语言好好学学练练。不说那么多,直接粘代码://晶振11.0592MHz 或

2020-12-21 15:17:27 130

原创 AltiumDesigner相同模块复用操作

AltiumDesigner相同模块复用操作框选已布局好的A电路,作为复用模块创建Room同样的操作,框选C电路,然后也创建Room查看A电路的Chanel Offset显示设置复制Channel Offset查看B电路的Channel Offset复制A电路的Channel Offset到C电路Room格式的复制框选已布局好的A电路,作为复用模块创建Room同样的操作,框选C电路,然后也创建Room查看A电路的Chanel Offset框选A模块的,然后点右下角的菜单——PCB——PCB

2020-12-17 11:19:18 4953 2

原创 液晶显示,LED1602

关于LCD的知识点像素:单位面积有多少个点,这是硬件层面的。而对于分辨率,则是硬件层面的。比如说电脑的分辨率是可调的,最高的分辨率就有多少个像素。显存,RAM,就是一个像素对应一个RAM的地址,如LCD1602中,RAM与点阵的一一对应关系:可以说,就是一个萝卜对应一个坑。想让对应的点亮,就给那个点的地址写进数据即可。如下图中的00这个空间,就是它对的指针。如定义这个空间个char 型的指针的方式:unsigned char *addr = 0x00。这样的话,这个空间就成了一个变量了。字模:可

2020-12-13 21:47:12 614

原创 xpt2046 ADC转换

普中科技,双核-AD开发板中用到的xpt2046中的时序时,如下:根据时序图,写出 xpt2046.h 的头文件:#ifndef __XPT2046_H__#define __XPT2046_H__unsigned int read_adc_data(unsigned char config_addr);void delay(void);#endifxpt2046.c 的代码如下:#include <reg51.h>#include "xpt2046.h"sbi

2020-12-12 11:30:04 4206 2

原创 位操作

对C语言还不太熟悉,把用到的位操作记录一下:如,SPI中,上升沿、高位写入,如下面的时序对应的代码如下:unsigned int get_adc_conver_data(void)unsigned char i = 0;unsigned int dat = 0;for (i=0; i<12; i++){ dat = DOUT | 1 << dat; //把DOUT放在左边,更便于理解。 DCLK = 1; DCLK = 0; }return dat;...

2020-12-10 16:11:59 85

原创 I2C EEPROM AT24C02的学习

这是在知乎上关于I2C的介绍《简单优雅的总线协议——I2C》,收获的赞比较多,这里转载一下。

2020-12-10 09:25:05 165

原创 程序调试方法

记录初衷:遇到问题,按照一套方法,把问题化解,逐渐的内化为心法,形成经验,这就是成长的过程。就好比吃的猪肉,经过消化、分解、吸收后变成了自己肉。程序分为三种结构:顺序选择循环总的方法: 不带分别心的分段法。因为程序是按照顺序执行的,所以,可以程序中加中 while(1),让程序停在选择、或循环语句之前,用来区分是上半段出问题,还是下半段出问题;然后,再缩小范围,是选择分支出问题?还是循环出问题?目前想到的就这个,先把这个玩6了,再回来补充一下心得。...

2020-12-09 18:11:51 179

原创 RTC 实时时钟 DS1302

知识点:BCD码,是介于人与计算机之间的一种编码。十进制 <== > BCD < ==>十六进制人习惯使用10进制,而计算机使用16进制可以更好的处理数据。对于时间这种信息,使用BCD码,就可以很好的平衡了人习惯与计算机的性能。把16进制中的A、B、C、D、E、F去掉,就是BCD码。所以说BCD码是16进制的阉割后的编码。DS1302中输出的时间数据,就是BCD码,如显示23秒,我们人类看起来是十进制的23,但其它是0x23 (0010 0011)...

2020-12-08 10:18:23 945

原创 串口2(接收来自上位机的数据,并发回上位机)

看了老师的视频之后,自己手动写了代码。一边写代码,一边编译,这种方式真好,可以及早发现问题。比如说,这次的代码中,关于中断函数,我就写错了,直接把中断优先级也给写在函数的声明里了,还好及时编译及早的定位了问题点。想想自己以前也用过中断函数,但为什么这次声明错误呢?因为之前的程序中,我直接在函数声明时就把函数主体给写上去了。所以,要多动手,多犯错了,记忆就深刻了。代码如下://功能实现:接收从上位机发来的信息#include <reg51.h>void uart_init (vo

2020-12-05 10:23:00 1285

原创 串口1(只发送数据给上位机,验证流程)

对于不熟悉的程序,可以一边写,一边编译,以减少错误。在写代码的过程中,一 般都是先写整体框架,比如先写主程序、子程序,再把子程序的内容给补充进去。写代码进阶:一、先看懂他人的代码,理清思路; (借助拐杖)二、修改他人代码,并正确运行; (试着扔拐杖,并自行走路)三、新CPU、新平台下,不看他们代码,自己根据原理图、Datasheet自己写出代码; (开始跑起来了)程序看起来并不难,只是,自已看STC官方的资料,实在是写不出代码来,毕竟自己是初学。还有,可能 STC的资料也比较乱吧,不知道STC

2020-12-04 20:35:14 892

原创 步进电机

在步进电机的程序中,比较重要的,莫过于对它的编码了。本例程中,使用到的步进电机,是双相四线电机——也就是说,它内部有两个线圈那就是两相,一个线圈引出两条线,两个线圈就引出了四条线。随着学习的继续,我也慢慢的把自己位在“软件”工程师的角色中,所以没有去纠结步进电机的内部结构、驱动芯片的内部原理——因为那样只会分散自己的学习精力、热情。对于初学步进而言,最重要的,是把步进电机的节拍(时序)搞懂,就可以了。编程更关心逻辑,硬件更关注电气原理。在本次的学习中,老师使用的是位操作,我使用的是数组,对于单相四线而

2020-12-01 18:37:49 668

原创 蜂鸣器3

本来,这次的教程,是可以控制蜂鸣器叫与不叫的时间的长度的,也就是输出的占空比不同,如下图示:奈何没理解老师的想法,可能是我对于占空比这个物理层面的想法影响了我对代码的理解。先做个记录,以后学会了再把回来把文章给补上。不能因这个问题就把学习进度给停下来了。Mark. ,2020-11-30...

2020-11-30 17:25:34 338

原创 蜂鸣器2

上一个程序采用的是Delay函数,这次改用定时器中断的方式。在这个程序中,遇到了个问题,那就是对于全局变量时,无法产生相应的频率。而使用宏定义,却可以。这个问题,以后再找原因。//实现功能,使用定时器的方式,让蜂鸣器响#include <reg51.h> //快速估算kHz与us之间的关系:kHz * us <=> 1000 ,举例:10kHz 对应 100us。//unsigned char KHz = 10; //蜂鸣器频率与定时器所定时间的关系:定时

2020-11-29 20:03:16 224

原创 LED点阵的显示-2

之前写的LED点阵的显示-1中,我试图把代码与硬件的连接关系给分析出来,其实是这种事无具细的思维方式是不对的。对于一个单片机的工程师而言,可以通过使用试验的方式,得到思路及代码的书写方式,为此,修改的代码如下://实现功能,在LED点阵中,显示“梁”字#include <reg51.h>#define uchar unsigned charsbit RCLK = P0^0; //锁存sbit SCLK = P0^1; //串行时钟sbit SER = P0^2; //数据v

2020-11-28 22:00:43 507

原创 蜂鸣器1

对于陌生的元件,我们先使用自己熟悉的方式使它工作起来,把一些功能给确定下来,后续再作调试、修改、完善。对于这个蜂鸣器,我们可以使用Delay函数,来产生一个简易的PWM,先让它响起来。后续再用定时器等其它方式来替代Delay函数。先使用土老帽的方式来验证思路,后续再考虑B格高的方式来驱动蜂鸣器。这是一种很好的思维方式,很值得学习。很简单的代码,如下://实现功能:对于蜂鸣器叫起来//对于未知或不熟悉的元件,这是一种很好的思维方式,很值得学习。#include <reg51.h>s

2020-11-28 21:38:24 330

原创 51单片机定时器

几年前,刚开始自学单片机的时候,还是应试考试的那种思维,总想着把书上每一个知识点都吃透,结果把学习信心给学没了。现在重新学,以老师的课程为主线,每天不间断的学习,每个项目都要自己练习,步步为营。现在再学定时器,其实也不过如此。自己写的代码如下://实现每隔1s钟,数码管就+1的效果#include <reg51.h>#define uchar unsigned #define FlashNumber 20; //计数20次时uchar SingleLED[] = {0xc0,

2020-11-28 16:23:19 1036 4

原创 初学编程的心态

对于一个新的程序,一上来就啪啪啪地写代码,这种情况,一般是因为对方写过类似的代码,他还有印象;在实际的工作中,一般在芯片的Datasheet中会给出参考的代码,自己要能看懂,然后,在参考代码的基础上进行修改。...

2020-11-27 20:12:50 144

原创 程序调试方法

看朱老师讲关于矩阵键盘的编程过程,有一段程序调试的过程,对些,我有一点自己的心得体会,记录一下:经验法,根据已有的经验,定位问题点。优点:快速;缺点:依赖经验,主观;有点像鸡兔同笼的各种解法,如果把鸡、兔换成了其它事物,那种方法可能就不可行了。科学方法论:分断定位法,一段一段的切割程序,把问题定位在哪一部分,或者说,哪一部分是没有问题的,然后一步一步的逼近问题点。有点像二分法。使用这种方法的人,心中没有对某段代码的“成见”,依靠客观的规律,看起来很傻的方法,但大多能找到并解决问题。解决的问题多了

2020-11-20 16:56:02 576

原创 矩阵按键

今天晚上,看朱老师的视频,以0.8倍的速度看,这样播放速度总算是跟上老师语速了。除了讲技术之外,老师在课程里也分享了自己最初学习时的心历路程,这些内容,对于我们这些初学的自学者来说,真的是有很大的鼓励。其它的单片机教程,一上来就搞有一点难度的代码,我等看得头大的同时,还会有一定的挫败感——为什么别人那么聪明?为什么我怎么想也想不出来?我是不是傻?是不是不适合学?我的逻辑思维是不是不行?。。。而朱老师并不会一开始就直接上那种简洁的代码,而是傻瓜式的,一条一条的写出来,然后,再把写出来的傻瓜代码进一步优化,

2020-11-17 23:03:30 452

原创 使用中断的方式以实现按键功能

大概是2013年,跟着郭天详的书自学单片机,学到中断时,学中断了,学不下去。原因有三:一是我当时的知道储备不足,没学过C语言,哪怕是对C语言的基本了解都没有,在使用C语言编程的时候,时常出错,难免会有挫败感;二是我的思维方式,我从底子里还是用应试教育的思路——总想抠书中的每一个细节,试图搞懂每一个概念的含义,由于不懂的东西多,慢慢的,挫败感又出来了;三是郭的书真不适合我这种基础的人;经过这些年来屡败屡战、屡战屡败的自学经验,现在算是懂得了一些道理,比如说,在自学的过程中,不能轻易的否定自己;要从容易

2020-11-17 07:50:39 2641

原创 按键的检测与去抖动

吴军老师说,销售的主要工作 = 卖出产品 + 把钱收回来。一次完整的按键事件 = 按下 + 弹起。为了避免因为按键抖动产生的误判断,当检测到键值为0时,先延时“让子弹飞一会”,如果再次检测到键值为0,说明是真的有按键按下了,那就干活——数码管显示对应数字。同时打卡——让 flag=1,说明真的有按下并且干活了。当松开按键之后,检测到键健为1,那就不干活,同时看一下flag的值是0还是1,如果是1,那说明有干活并打卡了,那就把flag恢复为0,为下一次干活做准备。代码如下:#include &lt

2020-11-16 12:21:56 1380

原创 LED点阵的显示-1

使用74HC595芯片,只要三根线接CPU,即可驱动LED点阵,可谓是驱动神器。在写代码前,一定要看74HC595的工作原理,那就决定了代码怎么写。言为心声,有想法,才有文章;有思路,有电路;有思路,有代码;思路如下:把数据的第8位给到芯片的串行输入引脚——>时钟引脚先拉低再拉高以形成上升沿——>数据存入74HC595芯片———>先把数据的第7位给到芯片的串行输入引脚——>如此循环8次,就可以把一个字节的数据都给送到了74HC595,此时芯片的Q7对应的是第8位的数据,Q0

2020-10-18 17:28:01 757

原创 关段码还是关位码影响数码管消影效果的分析

使用普中51-双核-A7的开发板,做数码管的控制,在写代码时做消影时,要先把段码的数据给关了,消影效果才好,不加延时效果也很好;如果是把位码的数据给关了,那么消影效果就差,就算是加长消影的延时时长,效果也不好。代码如下://此为不使用138译码器的代码void main(){ unsigned m, n=0x01; while(1) { for (m=0; m<8; m++) { P0 = ~(n << m); //打开位码 P1 = duan_

2020-10-13 21:46:58 860

原创 Altium Designer中光学定位点的设置

在封装库中新建MarkPoint,这个封装名,然后,放置一个直径为1mm的圆形焊盘,设置焊盘属性如下:再Top Layer层,放置一个圆形的线,当铺铜时会有DRC产生,完成如下图示:放置到PCB中,当有动态铜铺过光学定位点时,会自动避让...

2020-10-12 16:11:11 4267

原创 C51_流水灯

使用C语言中的左移/右移控制流水灯,有两种方法:给的初值不变,移的位数变;00000001 把1移动0位(把这个值作为基准行)00000010 把1移动1位00000100 把1移动2位00001000 把1移动3位00010000 把1移动4位00100000 把1移动5位01000000 把1移动6位10000000 把1移动7位代码实现void Delay(){ unsigned char i,j; for(i=0; i<200; i++) { for(j

2020-10-10 11:19:02 1786

AltiumDesigner相同模块复用操作.docx

对于Altium Designer PCB中,相同模块的复用操作。这个是doc文件。后面这些字是为了凑够50个字而写的。

2020-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除