【单片机】滑稽AT89C52表情实现

零、原因

在群里看到了这样一个表情:



这是用51做的,刚好开发板上有8个小灯,想实现一下。

一、代码

新建工程,写入如下代码:

#include<reg52.h>

sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4; void delay400ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
} void main()
{
unsigned char cnt = 0,n,i;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ADDR3 = 1;
ENLED = 0; while(1)
{
switch(cnt)
{
case 0:
{/*第一部分,灯从左至右依次点亮*/
n = 0xFF;
while(1)
{
P0 = n; delay400ms(); if(n == 0x00)break; n = n>>1;
}
cnt++;
} case 1:
{/*第二部分,灯从右至左依次熄灭*/
n = 0xFF;
while(1)
{
P0 = ~n; delay400ms(); if(n == 0x00)break; n = n<<1;
}
cnt++;
} case 2:
{/*第三部分,灯从左至右依次点亮且熄灭上一个*/
n = 0x80;
while(1)
{
P0 = ~n; delay400ms(); if(n == 0x01)break; n = n>>1;
}
cnt++;
} case 3:
{/*第四部分,灯从右至左依次点亮且熄灭上一个*/
n = 0x01;
while(1)
{
P0 = ~n; delay400ms(); if(n == 0x80)break; n = n<<1;
}
cnt++;
} case 4:
{/*第五部分,灯同时点亮后又同时熄灭10次*/
n = 0x00;
for(i = 0; i<20 ;i++)
{
P0 = ~n;
delay400ms();
n = ~n;
}
cnt++;
} case 5:
{/*第六部分,前后四个灯为一组两组灯交替点亮8次*/
n = 0xF0;
for(i = 0; i<16 ;i++)
{
P0 = n;
delay400ms();
n = ~n;
}
cnt++;
} case 6:
{/*第七部分,第3,7,1,4,6个灯依次点亮且熄灭上一个灯3次*/
for(i = 0; i<3 ;i++)
{
n = 0x20;
P0 = ~n;
delay400ms();
P0 = 0xFF;
delay400ms();
n = 0x02;
P0 = ~n;
delay400ms();
P0 = 0xFF;
delay400ms();
n = 0x80;
P0 = ~n;
delay400ms();
P0 = 0xFF;
delay400ms();
n = 0x10;
P0 = ~n;
delay400ms();
P0 = 0xFF;
delay400ms();
n = 0x04;
P0 = ~n;
delay400ms();
P0 = 0xFF;
delay400ms();
}
cnt++;
} /*大家还可以再加更多组合,记得cnt++*/ default : cnt = 0;break;
/*组合结束,重新开始*/
}
} }

保存,下载到单片机里:



成功实现效果~

二、总结

兴趣很重要,单片机很好玩,哈哈

【单片机】滑稽AT89C52表情实现的更多相关文章

  1. nodejs之mock与跨域代理的三两事

    emmm...好久没写博客了,都忘了该怎么开始. 那就先说下mockjs.因为一些原因,导致后台接口没有数据,那么我们就开始自己造数据,使用的是比较流行mockjs,根据文档就能简单的配置,然后开始愉 ...

  2. Warm_up(HCTF_2018)

    Warm up 考察知识点: 文件包含漏洞 代码审计 解题步骤 首先我们进来看到了一个滑稽的表情,没啥别的东西,先看看源码 源码中发现有注释 source.php 我们访问source.php,得到代 ...

  3. [每日电路图] 1、基于AT89C52单片机最小系统接口电路【转】

              come from:http://www.21ic.com/dianlu/basis/interface/2015-04-21/621607.htm AT89C52是美国Atmel ...

  4. 【转载】芯片级拆解51、AVR、MSP430、凌阳61、PIC,5种单片机,多张显微照片

    先秀一张解剖照,放大裁剪,小米1S微距拍摄,800万像素摄像头很给力!今天等待被拆的是5个单片机芯片:(1)凌阳16位单片机SPCE061A ,这是我接触的第一个单片机,最高主频49MHz,32KB的 ...

  5. Keil uVision4 创建51单片机工程

    Keil uVision4 创建51单片机工程 版权声明:未经授权,严禁转载! 在学习51单片机的过程当中,我们需要使用 Keil uVision4 来创建一个项目,今天就来图示一下创建的流程. 首先 ...

  6. 如何快速入门单片机C语言

    一.为什么要学单片机技术? 传统的电子产品升级改造成智能化的电子产品需要用到单片机技术.也就是说传统的电子产品如电视机.电子表.计算器.数码相机.手机.MP3.遥控器.洗衣机等产品智能化.微型化,需要 ...

  7. 单片机小白学步系列(十三) 点亮第一个LED——好的開始,成功的一半

    前面介绍了非常多概念知识.做了非常多准备工作,从这一节開始,我们正式開始单片机的学习.我们将使用单片机完毕一项非常easy的工作:点亮一个发光二极管(即LED:Light-Emitting Diode ...

  8. 【零基础】彻底搞懂51单片机各种型号(ATMEL系列)

    零.前言 初学者开始学习51单片机时往往先是一愣,说好51单片机啊,咋个型号是AT89C52,这个S52又是咋回事?上学的时候大都懵懵懂懂就这么用着,但始终没整明白,所以今天我们就彻底搞明白这些“51 ...

  9. 【零基础】入门51单片机图文教程(Proteus+Keil)

    参考资料: https://www.jianshu.com/p/88dfc09e7403 https://blog.csdn.net/feit2417/article/details/80890218 ...

  10. AVR单片机教程——示波器

    本文隶属于AVR单片机教程系列.   在用DAC做了一个稍大的项目之后,我们来拿ADC开开刀.在本讲中,我们将了解0.96寸OLED屏,移植著名的U8g2库到我们的开发板上,学习在屏幕上画直线的算法, ...

随机推荐

  1. 解决webstorm无法识别@等,无法ctrl跳转问题,vue项目配置

    1.1. 配置webpack.config.js文件 /*为了webstorm识别vite中设置的别名*/ 'use strict' const path = require('path') modu ...

  2. Project Euler 588 题解

    这玩意好像甚至有递推式--不太懂 (为什么是图片?cnblogs 第一个公式没渲染成功) 时间复杂度是 \(O(4^{\deg F}\log K)\) 的. #include<bits/stdc ...

  3. Linux安装hive

    1.需要先安装hadoop以及mysql,参考其他文章 安装hive和hadoop都在hadoop用户目录下 2.安装hive,之前,先在mysql上创建一个hive,数据库,并在hive数据库中建立 ...

  4. presto解析jsonArr转多行

    一.假数据解析 SELECT r1.col.dataSourceId, r1.col.database, r1.col.dataTable FROM (SELECT explode(r.json) A ...

  5. FLink参数pipeline.operator-chaining介绍

    1.当使用flink提交一个任务,没有给算子设置并行度情况下,默认所有算子会chain在一起,整个DAG图只会显示一个算子,虽然有利于数据传输,提高程序性能,但是无法看到数据的输入和疏忽,业绩反压相关 ...

  6. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-13- iframe操作-中篇(详细教程)

    1.简介 按照计划今天就要用实际的例子进行iframe自动化测试.宏哥还是用之前找到的一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了,可能后期这两个邮箱页面优化升级,也就 ...

  7. [QOJ8672][PKUSC2024] 排队

    函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作. 显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分. 时间复杂度 \(O(q\log n ...

  8. Thymeleaf判断集合是否为空

    Thymeleaf判断集合是否为空最近项目使用的是thymeleaf.项目架构是Springboot+Thymeleaf. 在判断集合是否为空的时候踩了坑与大家分享. 以下代码是判断集合是否为空的,m ...

  9. 【软件开发】Doxygen使用笔记

    [软件开发]Doxygen 使用笔记 Doxygen 是通过代码注释生成文档的事实标准,借用该工具可以将文档内容与代码写在一起方便维护. https://github.com/doxygen/doxy ...

  10. Spark - 面试题

    Spark是什么?答案:Apache Spark是一个快速.通用的大数据处理引擎,它提供了大规模数据集的内存计算和分布式计算能力.Spark可以处理各种数据源,如HDFS.Hive.Cassandra ...