名称:简易摆动显字器的设计
功能:
一、 电路的工作原理
对型号为MC908GP32的飞思卡尔单片机的最小系统电路图的绘制(如下图),根据电路图焊接MC908GP32的飞思卡尔单片机的最小系统,实现单片机的支撑运行电路。
对MC908GP32的飞思卡尔单片机进行编程,实现16只小灯在间隔一定的时间内不停的闪烁,在摆动电路板的情况下,根据人的视觉暂留,人的肉眼能看到电路板上显示预定的汉字(我们预定的汉字为:中国武夷山)。
二、电路原理图
在protel 99se 中的原理图如下图:
三、元件清单:
编号 | 元件名称 | 元件个数 |
1 | 型号为MC908GP32的飞思卡尔单片机 | 1个 |
2 | 电阻 | 4个 |
3 | 电容 | 7个 |
4 | 晶振 | 1个 |
5 | 开关 | 1个 |
6 | 红色LED发光二极管 | 16只 |
7 | 导线 | 若干条 |
四、元器件说明:
型号为MC908GP32的飞思卡尔单片机一片,用于控制小灯的闪烁。
电阻有:10K的一个,10M的一个,150K的一个,51欧姆的一个
电容有:0.47uf的一个,20pf的一个,15pf的一个,0.1uf的3个,0.01uf的一个,大小为32.768的晶振一个,开关1个用于实现MC908GP32飞思卡尔单片机的最小系统的工作电路。
红色LED发光二极管16只,在摆动的情况下用于显示预定的汉字
实物图:
实物图如下:
摆动的时候的效果如下图:
指导老师:叶希梅 、 蔡闯华
制作人员:傅世兴,杨克强,张杭林。
附录:
实现小灯显示汉字的部分源码(用C语言实现):
//[LED.h]小灯驱动头文件---------------------------------------------
//小灯控制需要用到的头文件
#ifndef LED_h
#define LED_H
#include "GP32C.h" //映像寄存器名定义
#include "Type.h" //类型别名定义
#include "GeneralFun.h"//延时调用
#define showupD DDRA //方向寄存器
#define showdownD DDRB
#define showup PTA //数据寄存器
#define showdown PTB
#define Width 16
#define TIME 30
//小灯控制相关函数声明
void LEDinit(void); //定义控制小灯的MCU引脚为输出
void ToShow1(const INT8U * LED_buf); //显示1个字
//void ToShowN(INT8U N, const INT8U * *LED_bufs); //显示N个字
#endif
//[LED.c]小灯驱动-------------------------------------------------
//本文件包含:
// (1)LEDinit:定义控制小灯的MCU的I/O引脚为输出
// (2)LED_L_A:驱动小灯"亮","暗"
//硬件连接:
// (1)本处的小灯是一个发光二极管,由MCU的I/O引脚控制
// (2)控制引脚=高电平时,小灯"暗";反之,小灯"亮"
#include "LED.h" //该头文件中包含了小灯控制引脚定义和相关函数声明
//LEDinit:定义控制小灯的MCU引脚为输出
//功能:定义控制小灯的MCU引脚为输出,并使小灯初始为暗
//参数:无
//返回:无
void LEDinit(void)
{
//PTA和PTB引脚全为输出,且全为高(暗)
showupD = 0xff;
showdownD = 0xff;
showup = 0xff;
showdown = 0xff;
}
//功能: 显示一个字符
//参数: LED_buf = 指向字模的指针
//返回:无
void ToShow1(const INT8U * LED_buf)
{
INT16U i;
//开始显示
for(i = 0; i < Width * 2; ++i)
{
showup = ~LED_buf[i]; //显示第i列上半部分
showdown = ~LED_buf[++i]; //显示第i列下半部分
Delay(TIME); //延时
}
//最后关灯
showup = 0xff;
showdown = 0xff;
return;
}
//字模存储
#include "Type.h" //类型别名定义
#include "stdio.h"
const INT8U LED_buf_1[] =
{//中
0x00,0x00,0xF8,0x03,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0xFF,0xFF,
0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0x08,0x01,0xFC,0x03,0x08,0x00,0x00,0x00
};
const INT8U LED_buf_2[] =
{//国
0x00,0x00,0xFE,0xFF,0x02,0x40,0x0A,0x50,0x8A,0x50,0x8A,0x50,0x8A,0x50,0xFA,0x5F,
0x8A,0x50,0xCA,0x52,0x8E,0x54,0x0A,0x50,0x02,0x40,0xFF,0xFF,0x02,0x00,0x00,0x00
};
const INT8U LED_buf_3[] =
{//武
0x20,0x20,0x20,0x60,0x24,0x3F,0x24,0x20,0x24,0x20,0xE4,0x1F,0x26,0x11,0x24,0x11,
0x20,0x10,0xFF,0x03,0x20,0x1C,0x22,0x20,0x2C,0x40,0x20,0x80,0x20,0xE0,0x00,0x00
};
const INT8U LED_buf_4[] =
{//夷
0x04,0x80,0x04,0x80,0x94,0x47,0x94,0x44,0x94,0x24,0x94,0x24,0x94,0x14,0xFF,0x0F,
0x94,0x14,0x94,0x24,0x94,0x44,0x94,0x54,0xF4,0xA5,0x06,0x9C,0x04,0x80,0x00,0x00
};
const INT8U LED_buf_5[] =
{//山
0x00,0x00,0xF0,0x7F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F,
0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xF0,0x7F,0x00,0x00,0x00,0x00
};
//字模容器
const INT8U * LED_bufs[] =
{
LED_buf_1, LED_buf_2, LED_buf_3, LED_buf_4, LED_buf_5,
};
INT16U count = sizeof(LED_bufs);