小开脑洞(51单片机组合编程:MorseCode、《晴天》、计时器)

 

目录

写在最前:本项目附视频效果展示,可点击文内链接查看。

一,模块化编程

二,功能介绍

三,bilibili链接视频

四,编写灵感


写在最前:本项目附视频效果展示,可点击文内链接查看。


一,模块化编程

模块化编程是一种软件设计技术,它强调将程序的功能分为独立的,可互换的模块,以使每个模块都包含执行所需功能的一个方面所必需的一切。

在本项目中具体实现方式是将Nixie.h、Nixie.c、Delay.h、Delay.c模块化。

Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__
void Nixie(unsigned char Location,Number,xms);
#endif

Nixie.c

#include 
#include "Delay.h"
unsigned char NixieNumber[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void Nixie(unsigned char Location,Number,xms)
{P0=0x00;switch(Location){case 1:P0=0x01;break;//1ÁÁ 0Ãðcase 2:P0=0x02;break;}P2=NixieNumber[Number];Delay(xms);//P2=0x00;//0ÁÁ 1Ãð
}

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif

Delay.c

void Delay(unsigned int xms)		//@12.000MHz
{while(xms--){unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}
}

前部定义

#include 
#include "Delay.h"
#include "Nixie.h"sbit L1=P1^0;
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;
sbit L5=P1^4;
sbit L6=P1^5;
sbit L7=P1^6;
sbit L8=P1^7;unsigned int i;
unsigned int j;int P=0x00;
int Hour=0;
int Min=0;
int S=0;

二,功能介绍

  • Morse Code

 本项目中,八个发光二极管全亮表示MorseCode中的长横杠,第一个发光二极管亮表示小点。

代码展示0~9的Morse Code,其中数码管显示正表示的数字,发光二极管负责显示MorseCode。

实现代码如下:

    //0for(i=0;i<100;i++){Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,0,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;P0=0x00;Delay(300);			//1for(i=0;i<100;i++){Nixie(1,1,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,1,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;P0=0x00;Delay(300);	//2for(i=0;i<100;i++){Nixie(1,2,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,2,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,2,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;P0=0x00;Delay(300);	//3for(i=0;i<100;i++){Nixie(1,3,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,3,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,3,5);L1=0;}P1=0xff;Delay(100);	for(i=0;i<100;i++){Nixie(1,3,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,3,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;P0=0x00;Delay(300);			//4for(i=0;i<100;i++){Nixie(1,4,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,4,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,4,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,4,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,4,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;P0=0x00;Delay(300);//5for(i=0;i<100;i++){Nixie(1,5,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,5,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,5,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,5,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,5,5);L1=0;}P1=0xff;P0=0x00;Delay(300);		//6for(i=0;i<100;i++){Nixie(1,6,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,6,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,6,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,6,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,6,5);L1=0;}P1=0xff;P0=0x00;Delay(300);//7for(i=0;i<100;i++){Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,7,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,7,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,7,5);L1=0;}P1=0xff;P0=0x00;Delay(300);//8for(i=0;i<100;i++){Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,8,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,8,5);L1=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,8,5);L1=0;}P1=0xff;P0=0x00;Delay(300);//9for(i=0;i<100;i++){Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,9,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;}P1=0xff;Delay(100);for(i=0;i<100;i++){Nixie(1,9,5);L1=0;}P1=0xff;P0=0x00;Delay(300);//爆闪L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;Delay(100);L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;L8=1;Delay(100);		L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;L8=0;Delay(100);L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;L8=1;Delay(100);	
  • 《晴天》

本项目,八个发光二极管展示音乐频谱,数码管显示歌词简谱。

实现代码如下:

for(i=0;i<100;i++)
{Nixie(1,3,5);L1=0;L2=0;L3=0;}
L1=1;L2=1;L3=1;
for(i=0;i<100;i++)
{Nixie(1,2,5);L1=0;L2=0;}
L1=1;L2=1;
for(i=0;i<100;i++)
{Nixie(1,4,5);L1=0;L2=0;L3=0;L4=0;}
L1=1;L2=1;L3=1;L4=1;
for(i=0;i<100;i++)
{Nixie(1,3,7);L1=0;L2=0;L3=0;}
L1=1;L2=1;L3=1;
for(i=0;i<100;i++)
{Nixie(1,1,5);L1=0;}
L1=1;
for(i=0;i<100;i++)
{Nixie(1,5,4);L1=0;L2=0;L3=0;L4=0;L5=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;
for(i=0;i<100;i++)
{Nixie(1,7,4);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;
for(i=0;i<100;i++)
{Nixie(1,1,5);L1=0;}
L1=1;
for(i=0;i<100;i++)
{Nixie(1,7,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;L7=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;L7=1;
for(i=0;i<100;i++)
{Nixie(1,1,14);L1=0;}
L1=1;
P0=0x00;
Delay(100);for(i=0;i<100;i++)
{Nixie(1,1,6);L1=0;}
L1=1;
for(i=0;i<100;i++)
{Nixie(1,6,9);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;
for(i=0;i<100;i++)
{Nixie(1,6,5);L1=0;L2=0;L3=0;L4=0;L5=0;L6=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;L6=1;
for(i=0;i<100;i++)
{Nixie(1,5,14);L1=0;L2=0;L3=0;L4=0;L5=0;}
L1=1;L2=1;L3=1;L4=1;L5=1;
for(i=0;i<100;i++)
{Nixie(1,4,4);L1=0;L2=0;L3=0;L4=0;}
L1=1;L2=1;L3=1;L4=1;
for(i=0;i<100;i++)
{Nixie(1,3,5);L1=0;L2=0;L3=0;}
L1=1;L2=1;L3=1;
for(i=0;i<100;i++)
{Nixie(1,2,4);L1=0;L2=0;}
L1=1;L2=1;
for(i=0;i<100;i++)
{Nixie(1,3,3);L1=0;L2=0;L3=0;}
L1=1;L2=1;L3=1;
for(i=0;i<100;i++)
{Nixie(1,4,6);L1=0;L2=0;L3=0;L4=0;}
L1=1;L2=1;L3=1;L4=1;
for(i=0;i<100;i++)
{Nixie(1,3,20);L1=0;L2=0;L3=0;}
L1=1;L2=1;L3=1;P0=0x00;
Delay(1000);
  • 计时器

本项目中,八个发光二极管以二进制计数形式累计秒数,每满60秒刷新以重新计数。数码管一秒内闪烁三次,分别表示时、分、秒。

实现代码如下:
 

for(Hour=0;;Hour++){for(Min=0;Min<60;Min++){P=0x01;for(i=0;i<60;i++){P1=~P;Delay(100);P1=0xff;P++;S++;for(j=0;j<100;j++){Nixie(1,Hour/10,1);Nixie(2,Hour%10,1);}P2=0xff;P0=0x03;P2=0x7f;Delay(50);//for(j=0;j<300;j++){Nixie(1,Min/10,1);Nixie(2,Min%10,1);}P2=0xff;P0=0x03;P2=0x7f;Delay(50);//for(j=0;j<300;j++){Nixie(1,S/10,1);Nixie(2,S%10,1);}P2=0xff;}S=0;}Min=0;}

三,bilibili链接视频

展示视频链接:单片机组合编程https://www.bilibili.com/video/BV1jS4y1d7rn?share_source=copy_webhttps://www.bilibili.com/video/BV1jS4y1d7rn?share_source=copy_web


四,编写灵感


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部