proteus+keilC51制作八卦阵

前言

本文展示用keil c51 + proteus制作一个八卦阵的过程。
下载文件
关注公众号小电动车,回复"八卦阵"获取工程文件及其他资料,建议结合工程阅读本文。

效果

组成

MCU

受到proteus和笔者电脑性能的限制,stm32模型运行及其卡顿,所以此处使用51单片机,完成这个简单的任务。
为了整体的观赏性,避免八卦和阴阳鱼像干扰,用了两个相互独立的51芯片。

锁存器

为了实现一组管脚控制多个LED和点阵,这里使用了锁存器,使用方法非常简单,OE置0,当LE脚输入高电平,Q[0 7]=D[0 7],当LE脚输入低电平,Q[0 7]锁死。

显示

因为在proteus,所以将单片机引脚直接接LED正极,逻辑1点亮,实际上51单片机可能没有足够的驱动能力点亮LED,一般将引脚接为负极,正极接上拉电阻,逻辑0点亮,移植需要注意。

一共16个引脚,8个控制第n行,8个控制某行中的n点,具体操作可以自己实验尝试。
以上模型都可以在proteus找到并放置。

阴阳鱼

按八卦阵的顺序摆好LED。
因为阴阳鱼眼睛和周围反颜色,所以将中间这一圈设为一组,内外两圈设为一组。

新建51工程,添加预定义,这里选择P2.0,
P2.1连接两个LE脚,并定义数组和顺序号,方便后面的循环。

sbit Elock=P2^0;        //控制眼锁存
sbit Llock=P2^1;        //控制阴阳锁存
uchar code yang[8]={0x87,0x0f,0x1e,0x3c,0x78,0xf0,0xe1,0xc3};
uchar code eye[8]={0xa5,0x4b,0x96,0x2d,0x5a,0xb4,0x69,0xd2};
uchar i=1;

手动添加延时函数,这里大概是1毫秒

void delay(unsigned int num)    //延时函数
{unsigned x, y;for(x=num;x>0;x--)for(y=120;y>0;y--);
}

LED控制函数,按i的顺序读取两个数组,让i在0 7循环,就可以实现阴阳鱼在旋转的效果。

void circle()
{Llock=1;        //锁存器八个管脚控制16个灯P1=yang[i];Llock=0;Elock=1;P1=eye[i];Elock=0;i++;if(i==8)        //数组循环,阴阳相济i=0;
}

主函数中,先让LED全灭,然后开始循环。

void main(void)
{P1 = 0xff;  //先全灭P1=eye[2];  //开始位置,可以自己尝试其他位置Elock=1;Elock=0;P1=yang[2];Llock=1;Llock=0;while(1){circle();delay(999);}
}

到此,八卦阵就做好了,点击开始仿真,可以显示循环效果。

八卦阵

8个点阵需要8个锁存器,此处选用P0作为8个锁存器的le控制,注意这款51单片机的P0需要接上拉电阻才可以输出信号。

这里使用P2口来控制点阵显示在哪一行,P1口控制显示在哪一点,循环到一个点阵时,其他点阵的锁存器都是关闭信号且锁住,然后控制显示内容。
定义八个数组和一些变量。

uchar code Qian[8]={0x00,0x00,0xff,0x00,0xff,0x00,0xff,0x00};
uchar code Xun[8]={0x10,0x48,0x24,0x92,0x49,0x04,0x12,0x08};
uchar code Kan[8]={0x00,0x00,0xe7,0x00,0xff,0x00,0xe7,0x00};
uchar code Gen[8]={0x10,0x48,0x24,0x82,0x41,0x04,0x12,0x08};
uchar code Kun[8]={0x00,0x00,0xe7,0x00,0xe7,0x00,0xe7,0x00};
uchar code Zhen[8]={0x10,0x48,0x20,0x82,0x41,0x24,0x12,0x08};
uchar code Li[8]={0x00,0x00,0xff,0x00,0xe7,0x00,0xff,0x00};
uchar code Dui[8]={0x10,0x48,0x20,0x92,0x49,0x24,0x12,0x08};
uchar i=0,j=1;
uint l=0;

变量i作为行数的记号,j是下一个点阵的记号和分组点阵记号,l是在主函数中记录时间的变量。
受到proteus或硬件性能限制,同时八个点阵循环视觉效果非常差,所以设置的逻辑是四个对角点阵显示,过一段时间l之后轮到另外四个对角点阵显示。

void ddelay(uint num)               //延时函数
{uint x,y;for(x=num;x>0;x--)for(y=45;y>0;y--);
}

手动延时,当视觉效果不理想时可以试试更改y值。

下面是八个点阵对应控制函数中的一个,其他见工程,j代表下一个点阵的标号,在后面的switch中调用判断。

void bagua_Q()
{P2=1<<i;P1=~Qian[i];ddelay(1);i++;if(i>7){i=0;j=3;}
}

整体循环函数,每次先刷新后判断到哪一个点阵。

void bagua_circle()
{P1=0xff;P2=0x00;switch(j){case 1:P0=0x01;bagua_Q();break;case 2:P0=0x02;bagua_X();break;case 3:P0=0x04;bagua_K();break;case 4:P0=0x08;bagua_G();break;case 5:P0=0x10;bagua_KU();break;case 6:P0=0x20;bagua_Z();break;case 7:P0=0x40;bagua_L();break;case 8:P0=0x80;bagua_D();break;}
}

主函数循环内调用bagua circle();循环显示八卦阵,同一时间只会看到[乾 坎
坤 离]或者[巽 艮 震
兑]四个卦象,同时l变量计时,超过对应值时切换一组,更改对应值可以更改单组显示时间。

void main(void)
{P2=0x00;ddelay(1);while(1){P2=0x00;bagua_circle();l++;if(l>999){l=0;if(j==2){j=1;}else if(j==1) {j=2;}}}
}

到此,太极八卦阵就做好啦,感兴趣的同学可以换上stm32等更快的单片机,设计PCB板,做出实物哦(●’◡’●)


这个八卦阵是笔者51单片机大作业的一部分,全文件已更新到网盘。
51单片机大作业—太极八卦阵

下载

关注公众号小电动车,回复"八卦阵"获取工程文件及其他资料,建议结合工程阅读本文。

proteus+keilC51制作八卦阵相关推荐

  1. proteus8如何画封装_如何proteus原理图生成pcb?步骤详解

    时下,利用Keil C51和Proteus来进行单片机系统开发已成为众多单片机爱好者的首选.Keil C51和Proteus的结合可以进行单片机系统的软件设计和硬件的仿真调试,可大大缩短单片机系统的开 ...

  2. 智能大数据SMART准则(读书笔记)

    引言部分 1.智能渔业 将微型传感器安置到鱼身上,用意追踪任何特定时间的鱼群位置,并运用声呐探测鱼群密度以及何时何地撒网 2.智能运动 英式橄榄球队员都有一个GPS追踪系统,使得假脸人员能够知道每一个 ...

  3. 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示

    [Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...

  4. 51单片机 74HC154译码器制作流水灯+Proteus仿真

    51单片机 74HC154译码器制作流水灯+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uint unsigned int #d ...

  5. 单片机———LED灯(Proteus和KeilC51)

    单片机----LED灯(Proteus和KeilC51) LED灯的简单介绍 练习 led灯两灯闪烁 8盏花样流水灯 1357,2468轮流点亮 从下到上两遍,从下到上两遍,中间到两头两遍 两边到中间 ...

  6. 51制作贪吃蛇小游戏,附带Proteus仿真

    一.代码解读 一个按钮来启动游戏的开始,开始以后LCD1602上显示当前的关卡和得分,当长到一定长度后会进入下一个关卡,每个关卡移动的速度不一样(越到后面速度越快,用到定时器) 有关蛇和食物里的属性都 ...

  7. 【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器

    前言 想出一个关于Protues仿真的系列,回想起在大学时做课程设计,大多数是用这个来做,这个系列就围绕一些常用的外设或者说课程设计题目来进行对以前知识的回顾,温故而知新,同时也希望能对新手读者的学习 ...

  8. c语言爱心灯制作步骤,基于51单片机设计的心形花样灯(PCB+Proteus仿真+源程序+设计报告)...

    设计了一个基于51单片机的心形花样灯电路,该电路可以实现32个LED灯循环闪亮.依次熄灭.对角闪亮.对角熄灭.间隔闪亮.间隔熄灭等多种功能,可以显示42种不同形式的变化效果.该电路主要由单片机芯片ST ...

  9. c51单片机矩阵键盘1602计算器_【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器...

    前言 想出一个关于Protues仿真的系列,回想起在大学时做课程设计,大多数是用这个来做,这个系列就围绕一些常用的外设或者说课程设计题目来进行对以前知识的回顾,温故而知新,同时也希望能对新手读者的学习 ...

最新文章

  1. Django ModelForm操作及验证
  2. [BZOJ4399]魔法少女LJJ
  3. 巴特沃斯带通滤波器matlab程序_带通带阻滤波器频率计算方法如何算
  4. python【蓝桥杯vip练习题库】ADV-186排列式
  5. 简述模块-random
  6. mysql5.7 archive安装_对于Mysql 5.7.19 winx64 ZIP Archive的运用安装详细说明
  7. Java,Math类中的ceil、floor和round函数源码解析以及自己重写实现
  8. python 去除列表空值_零基础学习Python之9大关键概念
  9. 爬虫 spider12——暂停小总结_爬虫流程_微服务架构流程
  10. 一个计算两个日期间隔的算法
  11. Builder模式和工厂模式的区别
  12. 原生Js汉语拼音首字母匹配城市名/自动提示列表
  13. 英语后置定语语法归纳
  14. OAEP及其在OpenSSL中的实现
  15. 有中国电信手机一定要看。CTWAP和CTNET是什么意思?有什么区别?
  16. 2021年国际及中国钢材价格走势、价格变化因素及后期钢材价格走势分析[图]
  17. PHP 技巧 * 附近的人功能实现
  18. vscode的搜索技巧
  19. 【Google语音转文字】Speech to Text 超级好用的语音转文本API
  20. 实例5:身体质量指数BMI

热门文章

  1. 【ABAQUS文档笔记】ABAQUS刚体单元和可变形单元的review
  2. ET框架-16 ET框架登录账号请求逻辑编写(1)
  3. esp8266 arduino 驱动MG996R大功率舵机
  4. CSDN【精品专栏】第22期
  5. 单链表结点删除--PTA
  6. 【babylonjs】环形屏幕3d展示
  7. c语言stricmp函数,stricmp ( )【C语言库函数源代码】
  8. ubuntu系统下安装Qtcreator
  9. IntelliJ IDEA修改项目名字
  10. 计算机专业毕业论文java毕业设计开题报告SSM项目源码网上水果生鲜超市商城|电商购物系统[包运行成功]