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. php排字符串的高低位怎么区分,PHP-根据字符串和所用字体计算字符串所占宽高...
  2. Iframe难点备忘
  3. php抽象方法db,PHP笔记之抽象方法抽象类
  4. 设定应用程式上的 Badge -- IOS
  5. python数据挖掘学习笔记】十九.鸢尾花数据集可视化、线性回归、决策树花样分析
  6. Vue 组件 data为什么是函数
  7. Tomas语录-关于String.valueOf()
  8. request.getContextPath()和request.getRealPath()的区别
  9. 我的世界android官方版下载,我的世界0.14.2下载
  10. ckeditor引入
  11. java基础【十二】外存、内存、CPU、缓存
  12. ImageMagick将多张图片拼接成一张图片_不会PS也没关系!我想向你推荐这18款免费好用的在线图片处理工具...
  13. laravel8 使用高德地图查询经纬度(输入地名获取经纬度)
  14. 参与 2021 第四季度 Flutter 开发者调查
  15. onlyoffice文件服务器,onlyoffice踩坑记录
  16. 软考不通过能不能补考?解答来了
  17. 2021用户行为分析领域最具商业合作价值企业盘点
  18. lvds传输距离标准_信号链基础知识(第 37 部分):LVDS——低压差分信号传输
  19. iiis环境安装php多个版本
  20. 记一次挖矿病毒的处理

热门文章

  1. js 转json_2020年了为啥 还要学 Node.js
  2. 这个视频「橡皮擦」让你瞬间消失,头发丝都不留 | ECCV 2020
  3. 线程(Thread)
  4. sqlserver到Oracle,SQLSERVER到ORACLE的数据库迁移
  5. ios10 Android airplay,iOS下AirPlay投屏功能实现
  6. 计算机文字录入培训大纲,《计算机文字录入》课程教学大纲.doc
  7. opencv读取图像的灰度值并显示出来
  8. 大学校友会校友卡小程序功能与UI设计
  9. Prometheus监控系列-- 进阶阶段 | 高级操作 | 配合Grafana | 邮箱报警 | 参数说明
  10. 国内DP厂家的相关资料信息