单片机c语言编程300例程序解释

51单片机C语言入门教程.pdf
扫描二维码,下载文件到手机
相关文档推荐
当前文件信息
浏览:4008次
下载:648次
您的VIP会员已过期,是否续费?
用户应遵守著作权法,尊重著作权人合法权益,不违法上传、存储并分享他人作品。举报邮箱:
京网文[0号 京ICP证100780号您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第2章51单片机C程序简介资料祥解.ppt 60页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
图2-1 图2-2 图2-3 当型循环结构 图2-4 直到型循环结构 2.4.2 条件与分支结构 ? 1. 条件(if)语句 C语言提供了三种形式的if语句: (1)
if (表达式) {语句;}
例如:if(x>y)
(2) if (表达式)
else {语句2;}
例如:if(x>y) x=1;
(3)if (表达式1)
if (表达式2)
if (表达式3)
if (表达式m)
2. 分支(Switch)语句 Switch 语句是多分支选择语句,非常适合实际问题中需要用到多分支的选择。例如,学生成绩分类(90分以上为‘A’等,80—90分为‘B’等,70—79 分为‘C’等,。。。。。); switch语句的一般格式如下: Switch (表达式)
常量表达式1: 语句1;break;
常量表达式2: 语句2;break;
常量表达式n: 语句n;break;
: 语句n+1;break;
只要switch括号中表达式的值与某一case语句后的常量表达式的值相等时,就执行其后的语句;若是所有case后的常量表达式值都不相同时,就执行default后的语句。 (3)每一个case后的常量表达式不能相同。 (4)case后语句的排列顺序,与程序执行结果无关。 对于switch语句,需要注意:
(1)常量表达式的值必须是整型,字符型或者枚举类型。 (2)break 语句用于跳出switch结构。
2.4.3 各种循环结构
C语言中有三种循环语句:while、for和do while语句。
1. for循环结构
C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 for 语句的一般形式为
for(循环变量初始化表达式1;关系表达式2;循环变量运算表达式3;) 语句
(1)for 语句一般形式中的“循环变量初始化表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略循环变量表达式1时,其后的分号不能省略。例如, sum=0; for(;i<=100;i++)
sum=sum+i; (2)如果省略关系表达式2,即不判断循环条件,循环无终止的进行下去。 (3)循环变量运算表达式3也可省略,但其后必须添加相应语句使其正常执行。例如,
for(i=1;i<=100;)
{sum=sum+1;
//代替循环变量运算表达式
} (4)for语句中的三个表达式都可以省,即for(;;),此时该语句相当于while(1)语句。 (5)没有循环体的for语句,例如,for (j=0;j<1000;j++);这种类型的for语句常用作时间延迟操作。 2. while 循环 while语句常用来实现“当型”循环结构。其一般格式如下:
while (表达式)
{循环体语句;}
当表达式为非0值时执行while 语句中的内嵌语句。其特点是:先判断表达式,后执行语句。
需要注意: (1)无限次循环的格式是while(1),因为while表达式中的值永远不是0。
3. do_while 循环
常用来实现“直到型”循环结构。其一般形式为:
while (表达式);
在一般情况下,用while语句和用do_while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的,因为do while语句中的循环体已经执行了一次。
4. goto 语句
goto语句为无条件转向语句,它的一般形式为
语句标号:
语句标号用标识符表示,它的定名规则与变量名相同,即由字母,数字和下划线组成,其第一个字符必须为字母或下划线。不能用常数来作标号。例如:
label_1; 是合法的,而“goto 12
正在加载中,请稍后...单片机C语言程序实例(带注释)
单片机C语言程序,几百道代码,适合新手练习,带注释。
单片机C语言程序实例(带注释)下载
下载资料需要,并消耗一定积分。
下载此资料的人还喜欢:
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
本周热点资料
电子资料热门词
上传者其它资料
单片机下载排行新概念51单片机C语言教程 - HelloWorld
课程简介:
《新概念51单片机C语言教程:入门、提高、开发、拓展》从实际应用入手,以实验过程和实验现象为主导,循序渐进地讲述51单片机C语言编程方法以及51单片机的硬件结构和功能应用。
课程作者:郭天祥
作者介绍:
郭天祥,老家新疆伊宁,原哈尔滨工程大学学生,后接触单片机,已经成为单片机领域的一个企业家,名下有天祥电子网站,其最大成就之一是开设了十天学会单片机系列课程并录制出来,网络上广泛流传,有《十天学会51单片机视频教程》、《十天学会PIC单片机视频教程》、《十天学会AVR单片机视频教程》,可以说这三种单片机类型几乎涵盖了市面上近90%的单片机产品,这些视频教程为广大单片机爱好者提供了最好的学习材料,另外还有关于ARM、嵌入式系统的视频教程,因其名誉广传,被广大学生敬称为郭老师。
百度网盘:
课程大小:1.96G
提取密码:mces&&
解压密码:www.he11oworld.com
第1篇入门篇
1.1单片机概述
1.1.1什么是单片机
1.1.2单片机标号信息及封装类型
1.1.3单片机能做什么
1.1.4如何开始学习单片机
1.251单片机外部引脚介绍
1.3电平特性
1.4二进制与十六进制
1.4.1二进制
1.4.2十六进制
1.5二进制的逻辑运算
1.6单片机的C51基础知识介绍
1.6.1利用C语言开发单片机的优点
1.6.2C51中的基本数据类型
1.6.3C51数据类型扩充定义
1.6.4C51中常用的头文件
1.6.5C51中的运算符
1.6.6C51中的基础语句
1.6.7学习单片机应该掌握的主要内容
2.1Keil工程建立及常用按钮介绍
2.1.1Keil工程的建立
2.1.2常用按钮介绍
2.2点亮第一个发光二极管
2.3while语句
2.4for语句及简单延时语句
2.5Keil仿真及延时语句的精确计算
2.6不带参数函数的写法及调用
2.7带参数函数的写法及调用
2.8利用C51库函数实现流水灯
第2篇内外部资源操作篇
3.1数码管显示原理
3.2数码管静态显示
3.3数码管动态显示
3.4中断概念
3.5单片机的定时器中断
4.1独立键盘检测
4.2矩阵键盘检测
5.1模拟量与数字量概述
5.2A/D转换原理及参数指标
5.3ADC0804工作原理及其实现方法
5.4D/A转换原理及其参数指标
5.5DAC0832工作原理及实现方法
5.6DAC0832输出电流转换成电压的方法
第6章串行口通信原理及操作流程
6.1并行与串行基本通信方式
6.2RS-232电平与TTL电平的转换
6.3波特率与定时器初值的关系
6.451单片机串行口结构描述
6.5串行口方式1编程与实现
6.6串行口打印在调试程序中的应用
第7章通用型,12864液晶操作方法
7.1液晶概述
7.2常用1602液晶操作实例
7.3常用12232液晶操作实例
7.4常用12864液晶操作实例
第8章I2C总线AT24C02芯片应用
8.1I2C总线概述
8.2单片机模拟I2C总线通信
8.3E2PROMAT24C02与单片机的通信实例
第9章基础运放电路专题
9.1运放概述及参数介绍
9.2反相放大器
9.3同相放大器
9.4电压跟随器
9.6差分放大器
第3篇提高篇
第10章定时器/计数器应用提高
10.1方式0应用
10.2方式2应用
10.3方式3应用
10.452单片机定时器2介绍
10.5计数器应用
第11章串行口应用提高
11.1方式0应用
11.2方式2和方式3应用
11.3单片机双机通信
11.4单片机多机通信
第12章指针
12.1指针与指针变量
12.1.1内存单元、地址和指针
12.1.2指针变量的定义、赋值与引用
12.2指针变量的运算
12.3指针与数组
12.3.1指针与一维数组
12.3.2指针与多维数组
12.4指针与函数
12.4.1指针作为函数的参数
12.4.2指向函数的指针
12.4.3指针型函数
12.5指针与字符串
12.5.1字符串的表达形式
12.5.2字符指针作为函数参数
12.5.3 使用字符指针与字符数组的区别
12.6指针数组与命令行参数
12.6.1 指针数组的定义和使用
12.6.2指向指针的指针
12.6.3 指针数组作为main()函数的命令行参数
12.7指针小结
12.7.1指针概念综述
12.7.2指针运算小结
12.7.3等价表达式
12.8C51中指针的使用
12.8.1指针变量的定义
12.8.2指针应用
第13章STC系列51单片机功能介绍
13.1单片机空闲与掉电模式应用
13.2“看门狗”概念及其应用
13.3用软件实现系统复位
13.4内部扩展RAM的应用
13.5扩展P4口的应用
13.6内部E2PROM的应用
13.7STC89系列单片机内部A/D应用
13.8STC12系列单片机内部A/D应用
13.9STC12系列单片机的PCA/PWM介绍
13.10STC12系列单片机的SPI接口介绍
13.11STC12系列单片机的“576MHz”超速运行
第4篇实战篇
第14章利用51单片机的定时器设计一个时钟
14.1如何从矩阵键盘中分解出独立按键
14.2原理图分析
14.3实例讲解
第15章使用DS12C887时钟芯片设计高精度时钟
15.1时钟芯片概述
15.2DS12C887时钟芯片介绍
15.3如何用TX-1C实验板扩展本实验
15.4原理图分析
15.5实例讲解
第16章使用DS18B20温度传感器设计温控系统
16.1温度传感器概述
16.2DS18B20温度传感器介绍
16.3实例讲解
第17章太阳能充/放电控制器
17.1控制器原理图分析
17.2控制器板上元件介绍
17.3实例讲解
第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示
18.1VCMSCOMM控件与单片机通信实现温度显示
18.2VBMSCOMM控件与单片机通信实现温度显示
第5篇拓展篇
第19章使用Protell99绘制电路图全过程
19.1绘制电路板概述
19.2建立工程
19.3制作元件库
19.4添加封装及制作PCB封装库
19.5错误检查及生成PCB
19.6布线电气特性设置
19.7自动布线和手动布线
第20章ISD400x系列语音芯片应用
20.1ISD400x系列语音芯片介绍
20.2ISD400x系列语音芯片操作规则
20.3ISD400x系列语音芯片应用实现
第21章电机专题
21.1直流电机原理及应用
21.2步进电机原理及应用
21.3舵机原理及其应用
第22章常用元器件介绍
22.1二极管
22.3场效应管
22.5蜂鸣器
22.6继电器
22.7自恢复保险
22.8瞬态电压抑制器
22.9晶闸管(可控硅)
22.10电荷泵
第23章直流稳压电源专题
23.1整流电路
23.2滤波电路
23.3稳压电路
23.4集成稳压模块的使用
23.5串联开关型稳压电源
第24章运放扩展专题
24.1简单低通滤波器
24.2“电流-电压”转换电路
24.3光电放大器
24.4精密电流源
24.5可调参考电压源
24.6复位稳定放大器
24.7模拟乘法器
24.8全波整流器和平均值滤波器
24.9正弦波振荡器
24.10三角波发生器
24.11自动跟踪对称电源
24.12可调实验电源
24.13运放相关术语表
附录A天祥电子开发实验板简介
A.1TX-1C51单片机开发板(配套详细视频教程)
A.2AVR单片机开发板(配套详细视频教程)
A.3PIC单片机开发板(配套详细视频教程)
A.4J-Link全功能ARM仿真器
A.5三星S3C44B0ARM7入门级开发板
A.6三星S3C44B0ARM7提高级开发板
A.7TX-51STAR51单片机开发板(配套详细视频教程)
点击进入:单片机51的C程序谁给解释下?
单片机51的C程序谁给解释下?#include #include unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,25,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,94,97};unsignunsigned char displaybuf[8]={16,16,16,16,16,16,16,16};unsunsigned char readdata[8]; sbit DQ=P3^7;bit resetpulse(void){DQ=0;for(i=255;i>0;i--);DQ=1;for(i=60;i>0;i--);return(DQ);for(i=200;i>0;i--);}void writecommandtods18b20(unsigned char command){for(i=0;i0;j--);DQ=1;}else{DQ=0;for(j=2;j>0;j--);DQ=1;for(j=33;j>0;j--);}command=_cror_(command,1);}}unsigned char readdatafromds18b20(void){temp=0;for(i=0;i0;j--);if(DQ==1){temp=temp | 0x80;}else{temp=temp | 0x00;}for(j=200;j>0;j--);}return(temp);}void main(void){TMOD=0x01;TH0=()/256;TL0=()%256;ET0=1;EA=1;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0x44);TR0=1;while(1){;}}void t0(void) interrupt 1 using 0{TH0=()/256;TL0=()%256;if(displaycount==2){P0=displaycode[displaybuf[displaycount]] | 0x80;}else{P0=displaycode[displaybuf[displaycount]];}P2=displaybit[displaycount];displaycount++;if(displaycount==8){displaycount=0;}timecount++;if(timecount==150){timecount=0;while(resetpulse());writecommandtods18b20(0xcc);writecommandtods18b20(0xbe);readdata[0]=readdatafromds18b20();readdata[1]=readdatafromds18b20();for(x=0;x255){readdata[1]++;}}readdata[1]=readdata[1]4;x=x & 0x0f;readdata[1]=readdata[1] |x=2;result=readdata[1];while(result/10){displaybuf[x]=result%10;result=result/10;x++;}displaybuf[x]=if(sflag==1){displaybuf[x+1]=17;}x=readdata[0] & 0x0f;x=x就是用DS18B20进行温度检测
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};定义数码管显示位选数组unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};定义共阴极数码管显示编码数组unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,25,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,94,97};定义ds18b20表格数组unsign定义变量unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};定义显示缓冲uns定义变量(计数单元)unsigned char readdata[8]; 定义变量sbit DQ=P3^7;定义连接ds18b20端口定义标致位..
我有更好的回答:
剩余:2000字
与《单片机51的C程序谁给解释下?》相关的作业问题
FANUC功能键作用:INPUT (输入程序及代码 )OUTPUT (输出程序及指令)OFFSET(储存刀具长度、半径补偿值)AUX GRAPH (显示图形)PRGRM (显示程序内容)ALARM (显示发生警报内容或代码 )POS (显示坐标) DGONS PARAM (显示自我诊断及参数功能)RESET 复位CUR
是0就直接输出,实际上只要是1位数就可以直接输出否则把数字变成字符串str,并且用正则“0+$”把末尾的0去掉从后往前遍历str每个字符,如果遍历到的字符在str中最后一次出现的位置和遍历到的位置相同,那么说明只出现了这一次,或者出现了多次,但是这是从右往左第一次出现满足3的字符放进buffer里转成long返回
import 表示导入工具包中的类,*为通配符,表示导入包中所有类Scanner s = new Scanner(System.in);//创建一个Scanner用于读取控制台输入int a = s.nextInt(); //读入一个整数,若没有输入将等待grade=a>90?'A':a>=60?'B':'C'; //
#26,#2 #17 等等所有带#的表示变量 ,可以看成一个数值,LT 小于 GT 大于 GE 大于等于 EQ等于 IF .GOTO.是条件跳转命令 GOTO后面的数字就是 程序里面的序号 N 多少比如第一个 IF[#26LT0]GOTO70 当#26小于0的时候跳转到N70这一个位置 其他的自己代一下就知道了 再问:
给你ds18b20温度传感器代码你参考,我的空间还有些资料////主函数void main(void){ uint8 while(1) //主循环 { temp = ReadTemperature(); DisplayTemperture(temp); }}
#includesbit pulse=P1^0;unsigned int num=0,times=0;void t0isr() interrupt 1{TH0=()/256;TL0=()%256;times++;if(times>=2){pulse=~times=
用来选择到底是显示8还是P,只要理解一下下面那组嵌套数组就可以了
key_s = 0x00;//清0 key_s |= K2;//将K2的值赋给key_s ;;;K2应该是Px key_s
能不能 具体点 .没看见代码 ,不知道怎么帮助你.可能是程序有问题 也可能是 硬件有问题咯.
程序本身没看出什么问题,但是单片机初始化后各端口是高电平,虽然不能驱动二极管.所以建议你把发光二极管正极接电源,负极接单片机.用低电平点亮.&我仿真了你的程序没发现你说的问题.
注释的已经很明白了,先配置了PWMxxx各个寄存器,再通过设PWME控制PWM输出或者不输出;主函数开始后,配置各个寄存器,初始化完成以后,用一个for循环让电机转了90度,然后关PWM,进入一个空的while循环;当有J口的中断时,进入中断函数,判断J0为1时,开PWM输出,这时PWM通道0和1按照特定时序输出PWM
function y=pipei(x)%构造发送信号波形t1=0:100;--自变量,间隔为1,等价于t1=0:1:100s01=-2+0*t1;s11=2+0*t1;--实际上产生了t1上的两个常量信号 -2和2t2=100:200;--第二个区间段s02=2+0*t2;s12=-2+0*t2;--第二个区间t2上的
这是51的系统架构决定的.因为51累加器有2个地址,一是特殊功能寄存器地址,指令使用这个地址访问累加器,是已明确知道访问对象就是累加器,是专指的,这是用A表示.比如ADD A,03H,因为在51中,ADD 的第一对象就是累加器,而不能用别的寄存器,用A可以少打俩字母CC.另外一个是累加器的直接内存地址,指令访问时并不明
一个IF必须对应一个ENDIF,你前面有3个IF,所以最后有三个ENDIF!这个程序好像是单片机的,我不太懂!
不知道是什麼单片机底下是51的..好久没用汇编了1.ADD A,20HMOV 20H,A2.MOV A,30HADD A,31HMOV 31H,A3.MOV DPTR,#2000HMOV A,20HMOVX @DPTR,A4.RAM EQU 20HCLR RAM.7CLR RAM.35.RAM EQU 20HSETB
STC:厂家型号简称,代表宏晶的单片机.89C52:基于CMOS工艺的51系列单片机.其中5代表类51内核,2代表片内8kB(0x2000)的Flash.40:最高工作频率40MHz.C:商业级.PDIP:封装形式.最后面的应当是出厂编号.
串变量赋值 查询语句是:Select DATETIME,VALUE,TAG FROM client WHERE MODE = 'AVERAGE' and (TAG=(Tag1的值) or TAG=(Tag2的值)or TAG=(Tag3的值)or TAG=(Tag4的值)or TAG=(Tag5的值)or TAG=(T
你这不是写的很清楚了么.class&J_Exception&extends&Exception&{}public&class&J_Test&{public&static&void&main(String[]&
#include #include #include static HANDLE hPort = INVALID_HANDLE_VALUE;unsigned char lpBuffer[100];BOOL OpenPort(const int portNum) { 打开串口 DCB\x09 COMMTIMEOU

我要回帖

更多关于 单片机学习入门 的文章

 

随机推荐