-
文章仅为本人学习记录,如有引用部分会另加说明引用出处
代码部分
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned charsbit LED_LE=P2^0; //LED锁存器控制端
sbit FM=P2^1; //蜂鸣器控制端
sbit RL=P2^2; //继电器控制端
sbit Duan=P2^3; //数码管段选锁存端
sbit Wei=P2^4; //数码管位选锁存端
uchar temp; //流水灯初值
sbit D1=P1^0; //灯组
uchar code s[]={ //数码管段选0~9(高电平有效)
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code ss[]={ //数码管段选0~9带小数点(高电平有效)
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//延时函数
/*void delay(uint z)
{uint x,y;for(x=100;x>0;x--)for(y=z;y>0;y--);
}*/void main()
{//temp=0xfe;//流水灯初值//P1=temp;//流水灯初值while(1){//继电器部分//LED_LE=1;//开LED锁存//RL=0;//三极管控制继电器开//D1=0;//while(1);//流水灯部分//temp=_crol_(temp,1);//循环左移函数//delay(600);//延时600毫秒//P1=temp;//循环赋值,流水灯//数码管静态显示部分Wei=1;//开启位选P0=0xfe;//文章中进行仿真的数码管位低电平有效Wei=0;//锁存位选Duan=1;//开启段选P0=s[1];Duan=0;//锁存段选while(1);}}
仿真部分
1、单片机基础电路连接
百度百科:准双向口是指P1、2、3有固定的内部上拉电阻,当用做输入时被拉高,当外部拉低时(低电平)会拉低电流,而P0则是真双向口,因为作为输入时它是悬浮的。
所以需要用排阻(图中RP1即排阻)给P0口接外部上拉电阻
2、灯组部分
加入了锁存器对灯组进行控制,锁存器LE拉高时,可以通过单片机的P1口控制灯组的亮灭,当锁存器LE拉低时单片机的P1口的值对灯组不造成影响
3、继电器加蜂鸣器部分
蜂鸣器,继电器都通过从单片机引脚输出高低电平控制三极管开关从而控制蜂鸣器,继电器的工作
继电器本身即可作为开关。继电器上并联的二极管起保护作用,防止继电器断电释放时,由于自感产生高电压损坏晶体三极管(三极管用于放大单片机输出的电流以驱动继电器)
在仿真时注意将继电器上端的导通电压改为12V
继电器工作原理转载至:行走的枸杞子——继电器的原理
4、锁存器数码管部分
数码管采用两个锁存器(锁存器的用法参照2、灯组部分 )分别控制段选和位选,选择数码管时注意共阴,共阳与代码的匹配
PS:更改proteus快捷键