【51单片机学习笔记一】-----LED灯的多种使用方式

发布于:2024-07-17 编辑:匿名 来源:网络

1. 8个LED灯交替闪烁,时间间隔为1s  1 /************ ********************** ********************  2 实验名称:8 个 LED 灯交替闪烁,时间间隔为 1s  3 实验时间:2019 年 12 月 2 日  4 ************************************************* ********/  5  6 #include  7  8 void 延迟(无符号字符 a); ? 0x00;  16delay(45);  17  18 /*根据原理图,P0置低电平,灯灭*/  19 P0 = 0xFF;  20delay( 45);   21 }  22 }  23  24 /*延迟1s,有错误。

计算公式大约为 ((((c*2))*b)*a)*/  25 void delay(unsigned char a)  26 {  27 unsigned char b,c;  28 对于(;a>0;a--)  29 对于(b=;b>0;b--)  30 对于(c=70;c>0;c--);   31  32 }  实验的代码非常简单。

但在实际操作中我们还是遇到了以下问题:   端口P0号不能为小写。

字母 P 必须大写。

  给P0赋值时,虽然赋值的是16进制值,但末尾不能加H。

  最重要的是延迟问题!   需要注意的是,用C语言是不可能制作出准确的延迟效果的,而且肯定会有一定的误差! ! ! !   首先我们来了解一下几种单片机的周期知识:   时钟周期:也叫振荡周期,定义为频率的倒数,是单片机中最基本、最小的时间单位。

  状态周期:时钟周期的两倍。

  机器周期:单片机的基本周期,完成一次基本操作,如取指令、存储器读写等。

由12个时钟周期(6个状态周期)组成。

  指令周期:单片机执行一条指令所需的时间,通常为1-4个机器周期。

  这里我把晶振的频率设置为和自己的设备一样,都是12MHZ,所以机器周期是1μs。

根据Keil的调试功能可以查看整个程序的时间。

打开Keil的调试功能(菜单栏放大镜中带d的图标),然后在需要的地方设置断点。

如下图所示:   如图所示,断点设置在第15行和第16行。

【51单片机学习笔记一】-----LED灯的多种使用方式

在图片的左侧,可以找到“sec”项。

此项是执行该步骤所需的时间,然后根据时间差可以计算出延迟时间。

  这里可以看到执行到第15行的时间是0.s  执行第16行的时间是0.s,所以执行P0=0x00的时间是2μs,也就是两个机器周期,因为这里采用的是立即寻址,一个周期取值,一个周期执行。

  执行第19行的时间是0.s,所以执行代码delay(45)的时间是0.35s,接近1s,所以有错误。

但对于实验结果来说,这就足够了。

  最重要的一点是,经过我自己的实验,不同类型的符号需要不同的时间。

比如我使用无符号整形的话,需要的时间是3.7s,所以差别还是很大的。

  但总而言之,应该遵循一些简单的原则:    尽量使用无符号数据结构。

   尝试使用char类型。

如果还不够就用int,然后用long。

  如果可能,不要使用浮点。

  使用简洁的代码,因为根据经验,简洁的C代码往往可以生成简洁的目标代码(尽管并非在所有情况下都是如此)。

  另外,组装好的延时程序也在这里发布。

同样,我们首先看一下用于实现此目标的代码。

  1 /************************************************ *** ****************************************  2 * 实验名称:简单测试LED闪烁   3 * 实验描述:获得8个LED交替亮灭的实验效果  4 ************************ ****** ********************************************** *****/  5  6 ORG H ;程序从该地址开始运行  7 LJMP MAIN ;跳转到MAIN程序  8  9 ORG H ;MAIN从H  10 MAIN:  11 MOV P0 ,# 00H ;P0 为低电平 LED 灯亮  12 ACALL DELAY ;呼叫延迟子程序  13 MOV P0 ,#0FFH  14 ACALL DELAY  15 AJMP MAIN ;跳跃到主程序  16  17 DELAY:  18 MOV R5,#08H ;传送立即数到寄存器R5  19 F3:  20 MOV R6,#0FAH  21 F2:   22 MOV R7, #0FAH  23 F1:  24 DJNZ R7,F1 ;如果为0,程序向下执行,如果不为0,程序跳转到  25 DJNZ R6,F2  26 DJNZ R5,F3  27 RET  28  29 END   其中 DJNZ 是减一非零传输指令。

有两个参数,第一个是被减数,第二个是传送的地址号。

   另外需要注意的是,MOV指令是单周期指令,DJNZ是两周期指令。

  下面是延迟分析:   执行MOV指令的时间为0.s  执行第12行时,时间为0.s,所以执行MOV语句的时间P0, #00H 是2μs,也是因为采用立即数寻址。

  可以看到延时程序耗时约1s。

计算分析过程:  MOV R5,#08H;执行1次,单周期 F3:MOV R6,#0FAH;执行1*8次,单周期 F2:MOV R7,#0FAH;执行1*8*次,单周期F1:DJNZ R7,F1;执行8**次,双循环DJNZ R6,F2;执行*8次,双循环DJNZ R5、F3;执行8次,双循环  ,所以总时间为1****2*8*2*2=μs  ,所以用汇编写延时程序显然比C语言更准确当然,这并不完全正确。

还有一个小错误。

应该用定时器来设计准确的延时。

  2。

LED 二进制加法显示   1 /****************************************   2 - ---------------------------------  3 实验名称:LED 二进制加法显示  4 实验时间:/12/2  5 *************************************/  6  7 #include   8  9 void Delay(unsigned char x);  10  11 void main()  12 {  13 unsigned char n = 0x00;  14 while(1)  15 {  16 P0 = n;  17 延迟(45);  18 n++;  19 }  20 }  21  22 void 延迟(无符号字符 x)  23 {   24 无符号字符 y,z;  25 for(;x>0;x--)  26 for(y=;y>0;y--)  27 for(z=35;z >0;z--);  28 }  3。

LED流水灯设计  1 /******************************************** *  2 ---------------------------------------------- ---------  3 实验名称:流水灯实验  4 实验描述:延迟实现LED灯流水线效果  5 实验时间:/12/2  6 ** ************ *************************/  7  8 #include  9 #include   10  11 void Delay(unsigned char a);   12  13void main()  14{  15  16unsigned char x;  17x = 0x01;  18while(1)19{  20p0 = x;   21 延迟(45);  22x = _crol_(x,1); //Char类型循环向左移动  23 }  24 }  25  26 void Delay(unsigned char a)  27 {  28 unsigned b, c;  29 for( ;a>0;a--)  30 对于(b=76;b>0;b--)  31 对于(c=35;c>0;c --);  32 }  intrins.h头文件内部函数说明:   _crol_字符循环左移   _cror_字符循环右移   _irol_整数循环左移   _iror_整数右旋转  _lrol_ 长整型左移   _lror_ 长整型右移   _nop_ 无操作(相当于 NOP 指令)   _testbit_ 测试并清除位(相当于 JBC 指令)   具体用法:    (1) 循环移位用法如上代码    (2) _nop_ 无操作:  P()=1;  _nop_();  P()=0;  功能: 空命令。

除了占用命令时间之外什么也不做。

   (3) _testbit_ 测试和清除位:    功能:生成 JBC 指令。

该函数测试一个位,设置时返回 1,否则返回 0。

如果该位为 1,则将该位重置为 0。

JBC 伪指令用于此目的。

  _testbit_只能与可直接寻址的位一起使用;不允许在表达式中使用。

【51单片机学习笔记一】-----LED灯的多种使用方式

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 惠美科技完成超3亿元D轮融资,由钟鼎资本

    惠美科技完成超3亿元D轮融资,由钟鼎资本

    投资圈(ID:pedaily)领投 据9月26日消息,北京惠美云科技有限公司(以下简称)医疗人工智能解决方案汇美科技)宣布完成超3亿元D轮融资。 本轮融资由钟鼎资本领投,润璋创投、苏州颐和等知名投资机构跟投,老股东启明创投继续跟投。 泰合资本担任本轮融资合作伙伴。 在以DRG

    06-17

  • 纽交所决定摘牌蛋壳公寓ADS

    纽交所决定摘牌蛋壳公寓ADS

    纽交所宣布,纽交所监管部门于3月15日暂停蛋壳公寓美国存托股票交易,现已确定不符合在纽约证券交易所上市的资格。 健康)状况。 蛋壳公寓未在规定期限内提交半年度财务信息,也未发布必要的新闻稿披露报告欠款。

    06-18

  • 星云创业扶持计划祝大家早日过年!

    星云创业扶持计划祝大家早日过年!

    星云创业扶持计划祝大家早日过年!为了感谢大家对星云创业扶持计划的支持,我们特推出新年答谢活动。 下载海报并分享给您的朋友圈。 上传截图并分享,即可增加抽红包的几率1倍,最高5次。

    06-18

  • 伊米农保获天使轮融资,经纬中国、以太资本、九合创投跟投,

    伊米农保获天使轮融资,经纬中国、以太资本、九合创投跟投,

    据投资界3月2日消息,互联网农险平台“一米农险”完成天使轮融资,投资方为经纬中国、九合创投、以太坊资本。   一米农保平台是一米信息旗下的互联网农业保险平台。 平台连接保险和期货机构,帮助保险机构设计和开发价格指数保险(玉米、鸡蛋、生猪、天然橡胶、发电等价格

    06-18

  • 中国资本在海外三大市场的投资情况分析

    中国资本在海外三大市场的投资情况分析

    我们重点从区域市场和行业市场两个角度进行分析。 中国资本的三大海外市场是美国/北美、印度/南亚、新加坡/东南亚。 市场投资布局。 从投资阶段分布来看,中资在北美的股权投资事件在早期投资中占比最大;其次是成长期投资和战略投资,占比分别为24%和19%;种子轮投资占比约1

    06-18

  • 诺辉健康完成2000万美元D轮融资

    诺辉健康完成2000万美元D轮融资

    据投资界4月21日消息,中国早期癌症筛查领域的先行者诺辉健康宣布完成2万美元D轮融资。 本轮融资由专注于医疗健康投资的PE基金Omniscience投资。 Capital领投,美国医疗保健基金Exome Asset Management以及老股东启明创投、软银中国、杜克大学资产管理等跟投。 诺辉健康首席执

    06-17

  • 君赛生物科技获数千万元Pre-A轮融资,元禾原点领投

    君赛生物科技获数千万元Pre-A轮融资,元禾原点领投

    据投资界2月21日消息,上海君赛生物科技有限公司(简称君赛生物)已完成数十项投资。 Pre-A轮融资数百万元。 元和元典领投,芙蓉投资跟投,皓月资本担任本轮融资独家投资方。 据该公司创始人金华君博士介绍,本轮融资将用于多种新型TIL细胞疗法的研发。 据36氪报道,君赛生物

    06-18

  • 金属3D打印公司“汉邦科技”完成新一轮数亿元融资

    金属3D打印公司“汉邦科技”完成新一轮数亿元融资

    投资圈(ID:pedaily)据2月20日消息,汉邦科技完成新一轮数亿元融资元。 本轮融资由中山创投、广发信德联合领投,深圳汇合资产跟投,云秀资本继续担任独家投资方。 作为国内金属3D打印领军企业之一,汉邦科技在金属打印设备、设备核心部件、软件和材料方面实现了全面布局,并

    06-18

  • 王兴:乔布斯和马斯克对智能手机和智能电动车的普及功不可没

    王兴:乔布斯和马斯克对智能手机和智能电动车的普及功不可没

    美团CEO王兴在饭否发帖表示,如果没有乔布斯,智能手机的普及还要推迟多少年?如果没有马斯克,智能电动汽车的普及还要推迟多少年?有朋友说,对比这两个问题后,他认为马斯克更厉害。

    06-18

  • 「斯年智行车」获数千万元Pre-A轮融资

    「斯年智行车」获数千万元Pre-A轮融资

    北京斯年智行车科技有限公司宣布获得数千万元Pre-A轮融资。 领投方为广发信德,跟投方为金榜资本、辰涛资本。 本轮融资将用于公司的技术研发、日常运营和市场拓展。

    06-18

  • 玩具共享平台圣诞鸡完成2500万元种子轮融资,并启动700万元Pre-A轮融资

    玩具共享平台圣诞鸡完成2500万元种子轮融资,并启动700万元Pre-A轮融资

    据投资界6月12日消息,玩具共享平台圣诞鸡已完成融资今年1月份投资估值为人民币1万元的种子轮融资。 目前,该项目已启动1万元Pre-A轮融资,资金主要用于智能柜、设备场地、玩具采购等研发与制造。   圣诞鸡玩具成立于2007年,是一家共享玩具柜运营商。 圣诞鸡满足了2-9岁儿

    06-18

  • VC支持的全球第三大并购案尘埃落定:微软75亿美元收购GitHub

    VC支持的全球第三大并购案尘埃落定:微软75亿美元收购GitHub

    投资界6月5日消息,微软昨晚宣布斥资75亿美元完成对GitHub的收购。   之前的所有猜测终于变成了现实。 据悉,这是历史上VC支持的第三大并购案例,而在这三大并购背后,都有红杉资本的身影。   GitHub 是谁?微软为何斥资75亿美元收购它?   GitHub 是世界上最大的社交编

    06-18