利用单片机驱动继电器,可以串联在线设备中断,达到模拟故障。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
制作出来的实物图如下:
PCB图
更新了程序,四种功能:继电器中断,两路继电器不同步吸起或者落下,模拟方波跳动
单片机源程序如下:
- #include <intrins.h> //引用程序目录的相对路径中的头文件
- #include <reg51.h> //引用编译器的类库路径里面的头文件
- #include "Delay.c" //引用编译器的类库路径里面的头文件
- #include "2004.c" //引用编译器的类库路径里面的头文件
- #include "Keyscan.c" //引用编译器的类库路径里面的头文件
- #include "Test.c" //引用编译器的类库路径里面的头文件
- /******************************
- 主程序
- ******************************/
- void Main()
- {
- Init(); //LCD初始化子程序
- PutString(3,6,"2021-04-06"); //欢迎界面
- Delay(1500); //欢迎界面显示时长
- SendCmdorData(0x01,0); // 写命令,显示清屏:1、数据指针清零 2、所有显示清零
- Delay(50); //50ms延时,给硬件反应时间
- Display(); //数据显示子程序
- Key=0xf0; //键盘口全部高电平
- while(1) //循环指令
- {
- Keyscan(); //键盘检测
- switch(num)
- {
- case 0:Setnum(num);num=50;break; //执行数字添加子程序,键盘按键值赋空值
- case 1:Setnum(num);num=50;break;
- case 2:Setnum(num);num=50;break;
- case 3:Setnum(num);num=50;break;
- case 4:Setnum(num);num=50;break;
- case 5:Setnum(num);num=50;break;
- case 6:Setnum(num);num=50;break;
- case 7:Setnum(num);num=50;break;
- case 8:Setnum(num);num=50;break;
- case 9:Setnum(num);num=50;break;
- case 11:set_up_able++;data_temp=0;Set();num=50;break; //执行设置参数子程序,键盘按键值赋空值
- case 12:set_up_able=0;Set();Start();num=50;break; //开始测试程序子程序,键盘按键值赋空值
- case 21:test=1;Display();set_up_able=0;Set();num=50;Relay1=1;Relay2=1;break;
- case 22:test=2;Display();set_up_able=0;Set();num=50;Relay1=1;Relay2=1;break;
- case 23:test=3;Display();set_up_able=0;Set();num=50;Relay1=0;Relay2=0;break;
- case 24:test=4;Display();set_up_able=0;Set();num=50;Relay1=1;Relay2=1;break;
- default:break; //default就是如果没有符合的case就执行它,default并不是必须的.
- }
- }
- }
复制代码
Keil代码与Proteus仿真下载:
毫秒级可调时间中断器(LCD).rar
(111.23 KB, 下载次数: 23)
|