电子技术部第七次培训总结
2017-12-25 08:02
183 查看
☺主要知识点:
1.Led灯循环亮灭
2.Led灯亮度调节
3.数码管显示
1.LED灯循环亮灭
①添加头文件<intrins.h>
②左移函数:
⑴
函数原型:
4000
_crol_(a,b);
⑵
运算规则:
将二进制位的操作数按指定移动的位数向左移动,高位移出(舍弃),低位的空位补零。
⑶
语法格式:
需要移位的数字
<<移位的次数
a <<b;
③右移函数:
⑴
函数原型:
_cror_(a,b);
⑵
运算规则:
将二进制位的操作数按指定位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位(无符号型补0)
⑶
语法格式:
需要移位的数字>>移位的次数
a>>b;
④程序实现:
1.通过调节供电时间,来改变平均电压的大小,从而改变led小灯亮度或者蜂鸣器音量。
本节课使用单片机小精灵来控制delay时间.
2.程序实现:
① .LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点。位数有半位,1,2,3,4,5,6,8,10位等等....,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
②. 通过对数码管上八个发光二极管的搭配点亮,来实现对所需数字的显示,是数码管的直接使用方法。
③锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个I/O口既能输出也能输入的问题。锁存器是利用电平控制数据的输入,它包括不带使能控制的锁存器和带使能控制的锁存器。所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号到来时才改变。
④138译码器,通过对三位输入端的电平不同搭配,来实现138译码器不同输出电平效果,从而实现对单片机上某一个数码管的使用的选择,例如138译码器三位输入端为'0 0 0',则对应的输出端为'11111110',从而导通第一个数码管的电路。
⑤动态显示原理:通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
⑥程序实现:
FROM ESTA
1.Led灯循环亮灭
2.Led灯亮度调节
3.数码管显示
1.LED灯循环亮灭
①添加头文件<intrins.h>
②左移函数:
⑴
函数原型:
4000
_crol_(a,b);
⑵
运算规则:
将二进制位的操作数按指定移动的位数向左移动,高位移出(舍弃),低位的空位补零。
⑶
语法格式:
需要移位的数字
<<移位的次数
a <<b;
③右移函数:
⑴
函数原型:
_cror_(a,b);
⑵
运算规则:
将二进制位的操作数按指定位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位(无符号型补0)
⑶
语法格式:
需要移位的数字>>移位的次数
a>>b;
④程序实现:
#include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay10ms(uint d) //延迟函数 延迟时间为 d*10ms { uchar i=0,a,b,c; for(;i<d;i++) for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void led() { uint a=0; a=0x00; P0=a; //令共阴极发光二极管初始化全灭 a=0x01;//点亮一盏发光二极管 while(1) { a=_crol_(a,1); //每次左移一位 P0=a; delay10ms(100); //持续亮1s } } void main() { led(); }2.调节亮度:
1.通过调节供电时间,来改变平均电压的大小,从而改变led小灯亮度或者蜂鸣器音量。
本节课使用单片机小精灵来控制delay时间.
2.程序实现:
#include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay10ms(uint d) //延迟函数 延迟时间为 d*10ms { uchar i=0,a,b,c; for(;i<d;i++) for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void delay10us(uint d) //延迟函数 延迟时间为 d*10us { unsigned char i =0,a,b; for(;i<d;i++) { for(b=1;b>0;b--) for(a=2;a>0;a--); } } void led_2() { uint time; P0=0x00; //发光二极管初始化全灭 while(1) { LED_2=1; //点亮LED_2小灯 LED_1=1; //点亮LED_1小灯 delay10us(10); LED_1=0; //100us之后熄灭LED_1 delay10us(time); time++; if(time>200) time=0; } } void main() { led_2(); }3.数码管的使用:
① .LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点。位数有半位,1,2,3,4,5,6,8,10位等等....,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
②. 通过对数码管上八个发光二极管的搭配点亮,来实现对所需数字的显示,是数码管的直接使用方法。
③锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个I/O口既能输出也能输入的问题。锁存器是利用电平控制数据的输入,它包括不带使能控制的锁存器和带使能控制的锁存器。所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号到来时才改变。
④138译码器,通过对三位输入端的电平不同搭配,来实现138译码器不同输出电平效果,从而实现对单片机上某一个数码管的使用的选择,例如138译码器三位输入端为'0 0 0',则对应的输出端为'11111110',从而导通第一个数码管的电路。
⑤动态显示原理:通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
⑥程序实现:
#include<reg51.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit C138=P2^4; sbit B138=P2^3; sbit A138=P2^2; uchar code table[]={0x3f,0x06,0x5b, 0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; void delay1ms(void) //延迟函数 延迟时间为 1ms { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void delay10ms(uint d) //延迟函数 延迟时间为 d*10ms { uchar i=0,a,b,c; for(;i<d;i++) for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void delay10us(uint d) //延迟函数 延迟时间为 d*10us { unsigned char i =0,a,b; for(;i<d;i++) { for(b=1;b>0;b--) for(a=2;a>0;a--); } } void number_led() { //先选择138译码器输出电平搭配 C138=0; B138=0; A138=0; //再选择数码管所需显示的字符 P0=table[0]; //间隔1ms,小于人眼暂留时间 delay1ms(); C138=0; B138=0; A138=1; P0=table[1]; delay1ms(); C138=0; B138=1; A138=0; P0=table[2]; delay1ms(); C138=0; B138=1; A138=1; P0=table[3]; delay1ms(); } void main() { while(1) { number_led(); } }
FROM ESTA
相关文章推荐
- VSTS架构师和程序员培训 的个人总结
- 爱立信交换培训总结(第一天)
- OpenInventor培训总结
- 性能测试培训总结-强大的nmon监控
- Android电子拍卖系统总结四
- 传智播客java培训2010年4月19日ORACLE总结(2)
- 森纵培训第九天课程总结
- 培训总结---方向比努力重要
- 工行数据中心项目管理辅导经验总结和推广——培训学得理念,辅导改变行为
- 基于性能的设计和sql调优培训的总结
- 网络工作室暑假后第三次培训资料(几种SQL分页的总结)整理 分类: MSSQLServer 2012-10-23 20:49 624人阅读 评论(0) 收藏
- 关于2017电子设计国赛四旋翼飞行器题目的经验总结与教训
- 2013.1.7TDSCDMA培训总结一
- 培训总结---方向比努力重要
- 性能测试培训总结-关联后如何使用该值?lr_save_string帮你
- 第七次课的总结与思考
- .Net培训个人总结笔记13
- .Net培训个人总结笔记28
- 2011年暑假ACM培训总结及省赛感悟
- 2016.7总结 培训 培训+培训