Proteus + Keil单片机仿真教程(二)炫彩灯

文章目录[隐藏]

一、炫彩灯

参考图:

程序分析:每个小灯闪两次,依次累加常亮,最后所有灯再闪烁两次。

        这个程序主要是延时程序、单片机引脚口的控制,流程化控制,相对比较简单,首先还是绘制原理图,同上节一样,首先搜索对应的元件添加到元件列表当中,具体如下:

AT89C51   ----> 51单片机
BUTTON    ----> 按钮
CAP       ----> 普通电容
CAP-ELEC  ----> 电解电容要分正负极
CRYSTAL   ----> 晶振
LED-BULE  ----> LED发光二极管(蓝色)*颜色可以自己选择
RESISTOR  ----> 电阻

绘制原理图,如下图所示:

 源代码:

//添加头文件,C51必要文件,主要定义的是51/52系列单片机
#include "reg52.h"
//引用延时函数
void Delay1MS(unsigned int t);
//定义引脚,这里定义P0引脚
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;

int main(void){
	//进入循环
	while(1){
		//P00闪烁两次
		P00 = 1;
		Delay1MS(200);
		P00 = 0;
		Delay1MS(200);
		P00 = 1;
		Delay1MS(200);
		P00 = 0;
		Delay1MS(200);
		
		//P00常亮1s
		P00 = 0;
		Delay1MS(1000);
		P00 = 1;
		Delay1MS(50);
		
		//P01闪烁两次
		P01 = 1;
		Delay1MS(200);
		P01 = 0;
		Delay1MS(200);
		P01 = 1;
		Delay1MS(200);
		P01 = 0;
		Delay1MS(200);
		
		//P00、P01常亮1s
		P00 = 0;
		P01 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		Delay1MS(50);
		
		//P02闪烁两次
		P02 = 1;
		Delay1MS(200);
		P02 = 0;
		Delay1MS(200);
		P02 = 1;
		Delay1MS(200);
		P02 = 0;
		Delay1MS(200);
		
		//P00、P01、P02常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		Delay1MS(50);
		
		//P03闪烁两次
		P03 = 1;
		Delay1MS(200);
		P03 = 0;
		Delay1MS(200);
		P03 = 1;
		Delay1MS(200);
		P03 = 0;
		Delay1MS(200);
		
		//P00、P01、P02、P03常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		Delay1MS(50);
		
		//P04闪烁两次
		P04 = 1;
		Delay1MS(200);
		P04 = 0;
		Delay1MS(200);
		P04 = 1;
		Delay1MS(200);
		P04 = 0;
		Delay1MS(200);
		
		//P00、P01、P02、P03、P04常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		Delay1MS(50);
		
		//P05闪烁两次
		P05 = 1;
		Delay1MS(200);
		P05 = 0;
		Delay1MS(200);
		P05 = 1;
		Delay1MS(200);
		P05 = 0;
		Delay1MS(200);
		
		//P00、P01、P02、P03、P04、P05常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		P05 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		P05 = 1;
		Delay1MS(50);
		
		//P06闪烁两次
		P06 = 1;
		Delay1MS(200);
		P06 = 0;
		Delay1MS(200);
		P06 = 1;
		Delay1MS(200);
		P06 = 0;
		Delay1MS(200);
		
		//P00、P01、P02、P03、P04、P05、P06常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		P05 = 0;
		P06 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		P05 = 1;
		P06 = 1;
		Delay1MS(50);
		
		//P07闪烁两次
		P07 = 1;
		Delay1MS(200);
		P07 = 0;
		Delay1MS(200);
		P07 = 1;
		Delay1MS(200);
		P07 = 0;
		Delay1MS(200);
		
		//P00、P01、P02、P03、P04、P05、P06、P07常亮1s
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		P05 = 0;
		P06 = 0;
		P07 = 0;
		Delay1MS(1000);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		P05 = 1;
		P06 = 1;
		P07 = 1;
		Delay1MS(50);
		
		//八个LED发光二极管第一次闪烁
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		P05 = 0;
		P06 = 0;
		P07 = 0;
		Delay1MS(200);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		P05 = 1;
		P06 = 1;
		P07 = 1;
		Delay1MS(200);
		
		//八个LED发光二极管第二次闪烁
		P00 = 0;
		P01 = 0;
		P02 = 0;
		P03 = 0;
		P04 = 0;
		P05 = 0;
		P06 = 0;
		P07 = 0;
		Delay1MS(200);
		P00 = 1;
		P01 = 1;
		P02 = 1;
		P03 = 1;
		P04 = 1;
		P05 = 1;
		P06 = 1;
		P07 = 1;
		Delay1MS(200);
		
	}
}
//1m延时程序
void Delay1MS(unsigned int t){
	unsigned char i;
	while(--t != 0){
		for(i = 0; i < 125; i++);
	}
}

编译:

 导入Protues运行:

 效果:

         结语:本章节是上一节的延续,主要是掌握并熟练Protues 绘图方法、单片机引脚连接方式、Keil引脚流程控制程序的编写,这里可以根据本节程序内容自行进行修改,编写出好看的LED程序。

版权声明:本文为CSDN博主「c343340657c」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c343340657c/article/details/121535093

生成海报
点赞 0

c343340657c

我还没有学会写个人说明!

暂无评论

相关推荐

MCU串行通讯和并行通讯的区别以及UART的理解

假如我们需要从一个MCU发送一段数据到另一个MCU,我们可以选择两种通信方式,串行通信或者并行通信。 假如我们要发送的数据是数字198转化为二进制,就是11000110,如果使用串行通信

TM1650芯片驱动四位数码管

自言自语 今天上班被丢了块4位数码管过来,还有一份驱动数码管的芯片资料。还好只有十几页,哈哈哈。 大致浏览下手册,了解到这个芯片叫TM1650,然后是使用模拟IIC协议的。那也就是说&#