51单片机入门1--与C语言的交接

我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51)

在说编程之前,要先说一些别的东西:

  • 二进制,八进制,十六进制
  1. 二进制中只有数字0和1,在二进制中1+1为10,我们常说十进制逢十进一,那二进制就是逢二进一,那为什么我会在这里说二进制呢,因为我们的51单片机的io口是可以接受发送低电平和高电平的,意思就是输入输出的口只有0和1两个状态,所以如果我们理解了二进制,那么对于单片机的输入和输出就会十分明了了
  2. 八进制,学过C语言,咱们都知道,在C语言中其实是不能直接写二进制的数的,但是是可以直接写八进制的数和十六进制的数,所以,在这里,八进制和十六进制还是为二进制服务的,可以说是二进制的两种表达形式,我们先来说八进制,八进制和二进制的互转是非常快捷,我们可以用这个方法完成二进制和八进制的互相转换:把二进制从低位开始,每三位一组,然后把每组转成八进制的数,这样得到的新的数就是我们二进制所对应的的八进制,举个例子:有这样一个二进制数1101010101010101010,我们把它从低位开始分成每三个一组,就是001 101 010 101 010 101 010,然后我们将每一组都转成八进制的数1 5 2 5 2 5 2,合起来就是1525252,我们就这样得到了八进制的数(在这里先说方法,原因一会儿会说)
  3. 十六进制,同样的,十六进制也是为二进制服务的,那么十六进制和二进制怎么转换呢,是这样的:把二进制从低位开始,每四位一组,然后把每组转成十六进制的数,这样得到的新的数就是我们二进制所对应的的十六进制,还是举个例子,还是那个二进制数1101010101010101010,我们把它从低位开始分成每四个一组,就是0110 1010 1010 1010 1010,然后我们将每一组都转成十六进制的数6 a a a a,合起来就是6aaaa,我们呢也就得到了十六进制的数

略微的解释:对于上述方法,可能有人会比较懵逼,不知道为什么要这样做,我们就来看一下:

  • 二进制3位一组,我们可以有这么八个数:000,001,010,011,100,101,110,111,这八个数正好就是从0到7,正好可以完完整整的表示我们的八进制,一个不多一个不少
  • 二进制4位一组,我们可以有这么十六个数:0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,而这十六个数正好就是从0到15,用十六进制表示就是从0到F,也是正正好好可以表示我们的十六进制,所以方法是这样的来的
  • 对于二进制数的计算,可能有些人不大理解,我们就以上面十六进制的例子来详细说一下:0110 1010 1010 1010 1010,我们算0110,0*8+1*4+1*2+0*1=6,然后我们再算1010,1*8+0*4+1*2+0*1=10,十六进制中10是a,所以结果是a,剩下的一样,所以我们就得到了6 a a a a
  • 在C语言中,八进制的数要在数字前面加一个0,比如017,但是是不能写018的,原因你自己斟酌一下,十六进制的数前面要加一个0x或者0X

位运算

为什么我要说位运算呢,因为位运算在我们的51中也有非常大的作用,然后另一个原因是有一些学校教学的进度可能会慢,一个学期没有学到这里,而我们却要用到位运算,怕出现这种尴尬的局面,我就把位运算也一同写了进来,在之后的学习生活当中,你会用到很多位运算的,特别是在单片机中,它不仅直观,而且还高效

  • &--按位与

首先要申明的一点,所有的位运算都是对二进制进行处理的,我们的按位与是一个双目运算符,是将两个数的二进制相对应的每一位进行逻辑与的操作,举个例子12&7,12的二进制为1100,7的二进制为111(也就是0111),我们就将每一位进行逻辑与的操作,得到了每个位上的结果0 1 0 0,就是二进制数100,而100转为十进制为4,所以我们得到了12&7的结果为4

  • |--按位或

有了之前计算按位与的操作,按位或就很好理解了,就是对每一位进行逻辑或的操作

同样的还有按位异或,左移,右移,按位取反等等,你可以点击这里获取相应的计算,在这里重复只会显得赘余,等之后需要用到的时候你就知道作用了

在说完这些之后,我们就可以进入单片机的学习了,我们下个文章见

程序烧录软件

原文地址:https://www.cnblogs.com/time-light/p/12239500.html

时间: 2024-10-07 18:30:11

51单片机入门1--与C语言的交接的相关文章

51单片机入门(三)

数码管显示,定时器中断:键盘检测: 1.数码管:分共阳极和共阴极数码管.我的实验板是共阴极,多位数码管的公共端叫做"位选线",连接在一起的段线叫做"段选线".位选是独立控制的,而段选是连接在一起的.段选数据由P0口发送,位选由P2口的2.3.4控制.(消影用P0=0x00) 2.中断:为使单片机具有对外部或内部随机事件发生的时间实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部时间的能力.51单片机内部共有5个中断源,外部中断0.1:定时器中断0

51单片机入门基础教程,视频、课件、源码免费下载

今天也是分享资料,不过是很大量的学习资料,足够您国庆七天在家闭关学习了,4G的51单机片开发学习视频和资料,包括每一节的视频.课件和源码!内容很大,想要更多的单机片学习.交流和实战的机会,可以上闯客网论坛,和同行并肩同行,一起学习 图一 下面就给大家分享单片机的基础知识PCB的种类1. 单面板(只在一个面走线)2. 双面板(在两个面都走线)3. 多层板(4.6.8.10......)(出两个面外还有内层)4. 柔性PCB(触摸屏等的连接) 图二 PCB的制作步骤(工业企业环境下的PCB制作步骤)

51单片机入门0--学习前的准备工作

对于什么是51,51能干什么,我不会在此进行说明,你可以自行百度 这是51的第一个文章,所以有一些东西是要说明的:如果你是真的想学51,那么,最重要的是坚持学下去,三天打鱼两天晒网是不行的,记住:坚持. 接下来就我的理解说一说学习51需要什么知识: 基本的识别电路的能力 拥有C语言基础 初学不需要什么模电数电的知识,你只需要能看懂电路,会写程序就好了 接下来就是学习之前的准备工作了: 首先是keil的安装,就像你使用C语言编译器一样,我们的单片机程序也是需要编译的,我们使用的是keil这个软件,

大虾对51单片机入门的经验总结

回想起当初学习AT89S52的日子还近在眼前:毕业后的第一年呆在亲戚公司做了10个月设备管理.乏味的工作和繁杂的琐事让我郁闷不已.思考很久后终于辞职.投奔我的同学去了,开始并不曾想到要进入工控行业,知识想找一份电子类技术职业,至于什么职业我根本没有目标可言.经过两个多月的挫折后我静下来思考,并上网查询一些前辈经验,又经过快2周的考虑我决定先自学单片机,毕竟电子信息专业的,有一点基础.于是买来了开发板(我还在这个论坛上发过小程序呢),下来了大量的资料,几乎很多是从本论坛下载的,我还是得感觉这么多的

51单片机入门(四)

用数码管实现一个二十四小时的时钟:定义三个按键K1(选择时分秒),K2(加一),K3(进入设置,再按一次则退出). 代码: //功能:用数码管二十四小时制的时钟//作者:刘建东//日期:2017.4.1#include<reg52.h>#define uchar unsigned charsbit K1=P3^1; //select hour /minute /secondsbit K2=P3^0; //add onesbit K3=P3^2; //into clock configurati

51单片机入门(五)

用LCD1602来显示一个二十四小时的时钟和以0.1秒计时的秒表 1.时钟代码: //use Lcd1602 to make a clock #include<reg52.h>#define uchar unsigned charsbit K1=P3^1; //select hour /minute /secondsbit K2=P3^0; //add onesbit K3=P3^2; //into clock configurationsbit E=P2^7;sbit RW=P2^5;sbi

51单片机入门与keil的使用

keil软件下载 keil uvision4以及注册机 http://www.liangchan.net/soft/softdown.asp?softid=5688 单独的注册机 http://www.newasp.net/soft/77176.html 注册 keil的注册入口为File菜单的license manager项 复制cid号码到注册机中,多generate几次,输入窗口,一定要出现类似'expires 2020'字样 建立一个项目并调试,以测试是否注册成功(解除仿真的2K程序限制

[学习笔记]15个QA让你快速入门51单片机开发

一.C语言相关... 1 Q1:sbit与sfr代表是什么?有什么作用?... 1 Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思?... 1 Q3:我粘贴了别人的代码,怎么发现没有unit这个类型?... 1 Q4:为什么好多变量都是char类型?它不是字符类型吗?怎么可以用来计数?    1 Q4.1:51单片机中的char,int,long,float,double各占多少个字节,取值范围多大?    1 Q5:unsigned char dat

一天:51单片机从入门到一个动态数码管显示数字控制

最近进的公司是一个做路由器的..很多嵌入式工程师.有个项目( 智能空调控制)是跟嵌入式工程师对接,我做APP+PHP..他做服务器.我们用MQTT(由于emqtt是用erlang写的,所以我也学了点erlang,后期有时间分享一下,这个语言很好,很强大.特别抽象).这个项目激发了我对嵌入式的兴趣,于是乎.开始从51单片机搞起了..所以就有了这篇文章...今天搞得东西挺多.我最近都是笔记形式,不想以前写的那么详细...因为学的东西太多,白天在公司搞项目,没时间写太具体... 今天学了什么呢? >k