搜档网
当前位置:搜档网 › 普通51单片机驱动3.5寸TFT的应用实例与源代码!

普通51单片机驱动3.5寸TFT的应用实例与源代码!

普通51单片机驱动3.5寸TFT的应用实例与源代码!
普通51单片机驱动3.5寸TFT的应用实例与源代码!

普通51单片机驱动3.5寸TFT的应用实例与源代码!

发布: 2010-1-15 16:59 | 作者: pcb_dz | 来源: 网络 | 查看: 675次

前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带LCD控制器的ARM7或ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5寸TFT模块,就很难找到了。

本文就是基于市场上一款比较使用的3.5寸TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。

一、硬件选择

1、 MCU:AT89S51

2、开发编译环境:Keil C51

3、 3.5寸TFT模块型号:MzT35C1

二、TFT模块基本性能:

1、基本参数

模块结构:内置控制器

屏幕大小: 3.5英寸

屏幕分辩率:320*240

屏幕颜色数:65536色(16位真彩色)

工作电压: 3.3V/5V可选

总线结构: Intel8080

总线宽度: 8Bit

背光形式:LED;可指令控制,0-127可调

连接方式:排针插座

触摸屏:标准配置不带触摸屏;模组留有触摸屏芯片焊盘和触摸屏接口2、接口引脚说明

3、操作时序(8位并行Intel 8080总线)

MzT35C1模块支持intel8080总线,总线的最高速度可达20MHz(当然总线的速度能否达到最高接口速度,还与用户的总线布线、线长等有关),也就是说,如果控制MCU速度足够快的话,是可以支持视频的显示的。

注意:MzT35C1模块的总线接口是8位的,也就意味着对显存的数据操作时,需要连续进行两次操作方可完成,先传高字节再传低字节;但对于寄存器的操作(写入寄存器地址,即A0为低时的写入操作)8位的操作方可。

三、MzT35C1与51硬件接口连接图

本例程使用GPIO来模拟总线时序。上图的模块供电为5V的模块,而模块的端口电平为3.3V的,所以在所有的51端口与模块间的连接串入了一个100欧的电阻,有关MCS51的其它电路不在图中画出,请用户具体参考其它的开发板文档进行了解。而图中的MzT35C1模块的相关引脚请以实物为准,图中仅示意对应的名称的端口,请用户在参考使用时注意。

三、底层驱动代码编写方法

1、端口配置

#i nclude "REG52.h"

#i nclude "intrins.h" //包含此头文件可直接操作内核的寄存器以及一些定义好的宏

#define LCD_Ctrl_GPIO() //无定义

#define

LCD_Ctrl_Out() LCD_CS_SET();LCD_RD_SET();LCD_RW_SET();

#define LCD_Ctrl_Set(n) //无定义

#define LCD_Ctrl_Clr(n) //无定义

sbit LCD_CS = P2^6;

#define LCD_CS_SET() LCD_CS = 1 #define LCD_CS_CLR() LCD_CS = 0

sbit LCD_RE = P3^5;

#define LCD_RE_SET() LCD_RE = 1

#define LCD_RE_CLR() LCD_RE = 0

sbit LCD_A0 = P2^5;

#define LCD_A0_SET() LCD_A0 = 1 #define LCD_A0_CLR() LCD_A0 = 0

sbit LCD_RW = P3^6;

#define LCD_RW_SET() LCD_RW = 1

#define LCD_RW_CLR() LCD_RW = 0

sbit LCD_RD = P3^7;

#define LCD_RD_SET() LCD_RD = 1

#define LCD_RD_CLR() LCD_RD = 0

#define LCD_Data_GPIO() //51的端口是双向的,无需特意规定方向,故无定义

#define LCD_Data_Out() //51的端口是双向的,无需特意规定方向,故无定义

#define LCD_Data_In() P0 = 0xff //51的端口要读数据前需要先输出0xff

#define LCD_Data_BUS_Clr() //无定义

#define LCD_Data_BUS_Set(n) P0 = n

#define LCD_Data_Read() P0

2、写数据和指令操作

//==============================================

//函数: void LCD_DataWrite(unsigned int Data)

//描述:写一个字(16bit)的显示数据至LCD中的显示缓冲RAM当中

//参数: Data写入的数据

//=============================================

#defineLCD_DataWrite(n)

LCD_A0_SET();LCD_CS_CLR();LCD_Data_BUS_Clr();LCD_Data_BUS_Set((unsign ed char)(n>>8));\

LCD_RW_CLR();LCD_RW_SET();LCD_Data_BUS_Clr();LCD_Data_BUS_Set(( unsigned char)n);LCD_RW_CLR();\ LCD_RW_SET();LCD_CS_SET()

//============================================== =======

//函数: void LCD_RegWrite(unsigned char Addr,unsigned int Command)

//描述:写一个字节的数据至LCD中的控制寄存器当中

//参数: Addr 要写入的寄存器的地址,低八位有效(byte)

// Command 写入的数据

//============================================== =======

#define LCD_RegWrite(n)

LCD_A0_CLR();LCD_CS_CLR();LCD_Data_BUS_Clr();LCD_Data_BUS_Set(n) ;\

LCD_RW_CLR();LCD_RW_SET();LCD_CS_SET()

2、读数据操作

//============================================= //函数: LCDBYTE LCD_DataRead(void)

//描述:从LCD中的显示缓冲RAM当中读一个字节的显示数据

//参数:无

//返回:读出的数据,

//备注: Mz通用版LCD驱动程序标准子函数

//===========================================

LCDBYTE LCD_DataRead(void)

{

LCDBYTE Read_Data;

LCD_Data_In();

LCD_A0_SET();

LCD_CS_CLR();

LCD_RD_CLR();

LCD_RD_SET();

LCD_RD_CLR();

LCD_RD_SET(); //前面的操作是要完成一次完整的空读操作后方能读取到数据

//如果用户需要连续读取显存,侧仅需要在第一次读数据时作一

//次空读操作即可

LCD_RD_CLR();

Read_Data = LCD_Data_Read();

Read_Data = Read_Data<<8;

LCD_RD_SET();

LCD_RD_CLR();

Read_Data |= LCD_Data_Read();

LCD_RD_SET();

LCD_CS_SET();

LCD_Data_Out();

return Read_Data;

}

3、初始化TFT操作

void LCD_Init(void)

{

// FLASH *Init_String;

//LCD驱动所使用到的端口的初始化

LCD_PortInit();

//根据LCD显示的配置,设置LCD的数据地址指针自动增加特性

//end

LCD_RE_CLR();

TimeDelay(5);

LCD_RE_SET();

LCD_RegWrite(0x03);

LCD_DataWrite((1<<7)| (0x60<<0)); //设置背光控制使能、背光亮度等级为60(0~127)

LCD_RegWrite(0x04); //写系统寄存器

// LCD_DataWrite((0<<7)| //当前显示页

// (0<<6) | //当前读写页设置

// (1<<0)); //显示开关

LCD_DataWrite(MzT35_Ctrl_Reg);

/* Init_String = Initial_Tab;

while(Init_String!=0xffff)

{

LCD_RegWrite(0x05);LCD_DataWrite(*Init_String++);

LCD_RegWrite(0x06);LCD_DataWrite(*Init_String++);

}*/

LCD_Fill(LCD_INITIAL_COLOR);

}

本站统一解压缩密码:wang1jin

MzT35_Keil_MCS51_Base.rar(576 KB)

基于51单片机两种音乐编码的比较及用法

基于51单片机的两种音乐编码方法的比较及用法 (建议对这方面有兴趣的朋友们要先看懂了解音乐简谱,包括高音、中音、低音,节拍、延时,及各个音调的频率,网上有很多资料) 1方法:用51单片机音乐编码器软件(Music encode) 输出十六进制数表示: 曲谱存贮格式unsigned char code MusicName{音高,音长,音高,音长...., 0,0}; 末尾:0,0 表示结束(Important) (其实软件“关于”里的源代码有使用方法的介绍) 音高由三位数字组成: 个位是表示1~7 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 2方法:编码为十六进制(高四位表示音调编码,低四位表示节拍编码)(各音调频率及初值计算定时器初值网上有,在此不叙说) do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。 如0x24,表示低音LA、1拍。以此类推 表4.4简谱对应的简谱码、T值、节拍数 简谱发音简谱码T值节拍码节拍数 5 低音SO 1 64260 1 1/4拍 6 低音LA 2 64400 2 2/4拍 7 低音TI 3 64524 3 3/4拍 1 中音DO 4 64580 4 1拍 2 中音RE 5 64684 5 1又1/4拍 3 中音MI 6 64777 6 1又1/2拍 4 中音FA 7 64820 8 2拍 5 中音SO 8 64898 A 2又1/2拍 6 中音LA 9 64968 C 3拍 7 中音TI A 65030 F 3又3/4拍 1 高音DO B 65058 2 高音RE C 65110 3 高音MI D 65157 4 高音FA E 65178 5 高音SO F 65217

基于51单片机的音乐播放器

基于51单片机的音乐播放器 余子健、刘胤、宋亮 摘要:本大作业是基于sst89e52rd2单片机制作的wav音乐播放器。该播放器可以播放存在sd卡中的音乐,通过对sd卡的读取并将数字信号送入单片机中,借助8位DA转换器TLC5620 变成模拟信号,经过放大器TDA2822放大交给扬声器发出最初读取的音频信号,实现音乐播放的功能。 关键词:SD卡,WAV文件,DA,音频放大 1背景 音乐随身听产品经过几年的发展,已经变得相当成熟。市场上可以购买到各类不同的音乐播放器,产品线涵盖了高中低不同档次。作为学习与研究,本作品尝试利用STI51开发板板载资源以及外搭的功率放大电路制作一台音乐播放器,能够播放通过计算机拷贝在SD卡(或MMC卡、TF卡)的根目录中的某一个WAV 文件。 2硬件设计 该音乐播放器硬件组成如下 本音乐播放器使用容量为2G的SD作为外部存储器 主控制器采用SST公司生产的SST89E58RDA,其40引脚封装的芯片功能模块如图1所示。芯片主要特想如下: ?兼容80C51系列,内置超级FLASH存储器的单片机 ?工作电压VDD=4.5~5V,5V工作电压时0-40MHz频率范围 ?1KB的内部RAM ?两块超级FLASH EEPROM,32KB的基本存储卡和8KB的二级存储块(扇区大小为128字节),二级存储块可用于存放掉电后要保存的数据,放在内部具有极强的抗干扰性?最大片外程序/数据地址空间为64KB ?全双工增强型UART,帧错误检测,自动地址识别 ?9个中断源,4个中端优先级 ?降低EMI模式(通过AUXR SFR不允许ALE输出时钟),确保了单片机的高抗干扰性?双DPTR指针(查表,寻址更方便)

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

51单片机蜂鸣器播放音乐代码

/*生日快乐歌曲*/ #include <> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j // 这是单片机音乐代码生成器生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出为可以修改成其它 IO 口uchar m,n;

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd 时间和日期轮流显示。时间显示5S 日期显示3S。 可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。 三个按键对时间和闹铃进行设置,六个LED进行显示。 计时采用DS1307。继电时间不丢失,设置过的闹铃也不丢失。 闹铃音乐由单片机的两个定时器去产生频率实现。 部分程序如下: //************************************************* //************************************************ //*********************************************** //程序名:DS1307 时钟程序 //功能描述:用六个八段LED 轮流显示时间 // 和日期。有6个闹钟。上电时从DS1307中读出 // 当前时间、日期、闹钟。 // // // // // #include #include #define uchar unsigned char #define uint unsigned int #define LED P2 #define LEDBit P0 #define nop _nop_(>

#define LightCount 40 #define LightMax 80 sbit SCL=P3^1。 sbit SDA=P3^0。 sbit ModeKey=P1^0。 sbit UpKey=P1^1。 sbit DownKey=P1^2。 sbit Speak=P3^6。 code uchar LCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。 //0x25, //uchar Clock[]={0x88,0x88,0x88}。 code uint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4, /*童年*/ 8,4,8,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 8,4,8,4,4,4,8,8,4,4, 4,4,4,4,4,4,4,4,4,16, 4,8,4,8,8,4,8,4,4,4, 8,4,8,4,4,4,4,4,16,4, 8,4,8,8,4,8,4,4,4,8, 4,8,4,4,4,4,4,16,0}, Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4, /*小毛驴*/ 4,4,16,4,4,4,4,4,4 ,4, 4,4,4,4,4,8,4,4,4,4, 4,4,4,4,4,4,4,4,4,16, 4,4,4,4,2,2,2,2,4,4, 4,4,4,4,16,0}, Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477, 568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,477,568,637,719, 637,637,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,568,477,851,318,

51单片机课程设计 AD转换

课程设计报告 华中师范大学武汉传媒学院 传媒技术学院 电子信息工程2011 仅发布百度文库,版权所有.

AD转换 要求: A.使用单片机实现AD转换 B.可以实现一位AD转换,并显示(保留4位数字)设计框图:

方案设计: AD转换时单片机设计比较重要的实验。模数转换芯片种类多,可以满足不同用途和不同精度功耗等。 外部模拟量选择的是简单的电位器,通过控制电位器来改变模拟电压。显示电压值采用一般的四位七段数码管。而AD转换芯片采用使用最广的ADC0809 ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。 下面说明各引脚功能: ?IN0~IN7:8路模拟量输入端。 ?2-1~2-8:8位数字量输出端。 ?ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。?ALE:地址锁存允许信号,输入端,高电平有效。 ?START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 ?EOC: A/D转换结束信号,输出端,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 ?OE:数据输出允许信号,输入端,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 ?CLK:时钟脉冲输入端。要求时钟频率不高于640KHz。

?REF(+)、REF(-):基准电压。 ?Vcc:电源,单一+5V。 ?GND:地 工作原理: 首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC 变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。 本次实验采用中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。 首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。 采用中断可以减轻单片机负担。并可以使程序有更多的空间作二次开发。

用51单片机演奏音乐

单片机演奏音乐 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1 高一个倍频程, 在音乐中1与.1(1前面的点应在1的上面),2与 .2……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i 八音区为例,12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i。其中“#”表示半音,用于升高或降低半个音。这12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。 知道了一个音符的频率后,常采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2f)后,将单片机上连接蜂鸣器的I/O (P3.7)口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。例:我门以440Hz的声音频率来计算,其对应的时间 t=1/2f=1/2*440=1136us 但在实际程序中常采用查表的方式来取的t 值,而为了节约存储器空间则将t值以字节来进行存储,由于大部分t值都大于256。所以,需将t值除以一个常数(t/x)使其小于256。那么,在查表取得t 值后就要再乘上该常数后再赋给延时程序。 以下为常用音符对应的频率和二分之一周期值t :

(完整版)基于51单片机的自动音乐播放器设计毕业设计

本科毕业论文(设计) 题目: 基于51单片机的自动音乐播放 器设计 院系:电子与通信工程学院 专业:通信工程 姓名:张志顺 指导教师:陈冬云 教师职称:助教

填写日期:2014年4月20日 摘要 为了人们在快节奏的日常生活,优化工厂、事业单位、公司等的计时系统,采用了依靠单片机为基础设计了一种的自动音乐播放器。本设计利用单片机89C58RD+的计数和定时功能,来完成对时间的定时和显示功能。并且,通过对定时器初值的设定来产生不同频率的声音,利用定时器中断来对音乐节拍长度的控制。通过LM386N1音频功率放大器的音频放大功能,将单片机控制输出的信号放大,然后通过扩音器播放乐曲。通过MAX232型芯片,可以转换PC机上的电压和单片机的电源电压,再通过相应串口接入PC机,这样就能从PC机上将用C语言编写的程序代码下载到单片机上。最后可以在数码管上显示时间,当到达之前设定的时间之后,

扩音系统就会自动播放一段连续而美妙动听的音乐。此设计规避了传统闹钟的难听并且刺耳声音,而变成的是美妙动听的音乐,能给处于当前快节奏生活的人们的日常生活提供精确的计时,且因为成本较低,值得推广。 关键词:单片机;自动音乐播放;音频转换;时间显示;LM386N1音频功率放大器。 Abstract

To people in the fast pace of daily life, optimization of factories, institutions, companies such as timing system, based on microcomputer was adopted to design a kind of automatic music player. This design using the single chip microcomputer 89 c58rd + count and timing functions, to complete the regular and display function of time. And, through to the setting of the initial value of timer to generate different frequencies of sound, using a timer interrupt to control of the beat of the music length. Through the audio amplifier function LM386N1 audio power amplifier, the single-chip microcomputer control output signal amplification, and then through loudspeakers. Through MAX232 chip, can convert the voltage of power supply voltage of PC and microcontroller, again through the corresponding access PC serial port, so you can from the PC to download program code written in C language to the single chip microcomputer. Last time can be displayed on the digital tube, when, after arriving in setting the time before the public address system will automatically play a continuous and delightful music. This design to avoid the traditional alarm clock ugly and give in the fast-paced life of the People's Daily life to provide accurate timing, and because of lower cost, is worth promoting. Key words: single chip microcomputer; Automatic music playback; Audio conversion; Time display; LM386N1 audio power amplifier.

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机音乐播放器程序

#include //包含51单片机寄存器定义的头文件 sbit sound=P3^6; //将sound位定义为P3.6 unsigned int C; //储存定时器的定时常数 //以下是C调低音的音频宏定义 #define l_dao 262 //将"l_dao"宏定义为低音"1"的频率262Hz #define l_re 286 //将"l_re"宏定义为低音"2"的频率286Hz #define l_mi 311 //将"l_mi"宏定义为低音"3"的频率311Hz #define l_fa 349 //将"l_fa"宏定义为低音"4"的频率349Hz #define l_sao 392 //将"l_sao"宏定义为低音"5"的频率392Hz #define l_la 440 //将"l_a"宏定义为低音"6"的频率440Hz #define l_xi 494 //将"l_xi"宏定义为低音"7"的频率494Hz //以下是C调中音的音频宏定义 #define dao 523 //将"dao"宏定义为中音"1"的频率523Hz #define re 587 //将"re"宏定义为中音"2"的频率587Hz #define mi 659 //将"mi"宏定义为中音"3"的频率659Hz #define fa 698 //将"fa"宏定义为中音"4"的频率698Hz #define sao 784 //将"sao"宏定义为中音"5"的频率784Hz #define la 880 //将"la"宏定义为中音"6"的频率880Hz #define xi 987 //将"xi"宏定义为中音"7"的频率523H //以下是C调高音的音频宏定义 #define h_dao 1046 //将"h_dao"宏定义为高音"1"的频率1046Hz #define h_re 1174 //将"h_re"宏定义为高音"2"的频率1174Hz #define h_mi 1318 //将"h_mi"宏定义为高音"3"的频率1318Hz #define h_fa 1396 //将"h_fa"宏定义为高音"4"的频率1396Hz #define h_sao 1567 //将"h_sao"宏定义为高音"5"的频率1567Hz #define h_la 1760 //将"h_la"宏定义为高音"6"的频率1760Hz #define h_xi 1975 //将"h_xi"宏定义为高音"7"的频率1975Hz /******************************************* 函数功能:1个延时单位,延时300ms ******************************************/ void delay() { unsigned char i,j; for(i=0;i<300;i++) for(j=0;j<300;j++) ; } /******************************************* 函数功能:主函数 ******************************************/ void main(void) { unsigned char i,j; //以下是《知足》的一段简谱

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机课程设计实验报告

51单片机课程设计报告 学院: 专业班级: 姓名: 指导教师: 设计时间:

51单片机课程设计 一、设计任务与要求 1.任务:制作并调试51单片机学习板 2.要求: (1)了解并能识别学习板上的各种元器件,会读元器件标示; (2)会看电路原理图; (3)制作51单片机学习板; (4)学会使用Keil C软件下载调试程序; 用调试程序将51单片机学习板调试成功。 二、总原理图及元器件清单 1.总原理图 2.元件清单 三、模块电路分析 1. 最小系统: 单片机最小系统电路分为振荡电路和复位电路, 振荡电路选用12MHz 高精度晶振, 振荡电容选用22p和30p 独石电容;

图 1 图 2 复位电路使用RC 电路,使用普通的电解电容与金属膜电阻即可; 图 3 当单片机上电瞬间由于电容电压不能突变会使电容两边的电位相同,此时RST 为高电平,之后随着时间推移电源负极通过电阻对电容放电,放完电时RST 为低电平。正常工作为低电平,高电平复位。 2. 显示模块: 分析发光二极管显示电路: 图 4 发光二极管显示电路分析:它是半导体二极管的一种,可以把电能转化成光能,常简写为

LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,产生自发辐射的荧光。图中一共有五个发光二极管 其中一个为电源指示灯,当学习板通电时会发光以指示状态。其余四个为功能状态指示灯,实际作用与学习板有关 分析数码管显示电路 图 5 数码管显示电路分析:数码管按段数分为七段数码管和八段数码管,图中所用为八段数码管(比七段管多了一个小数点显示位),按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管.共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。数码管主要用来显示经电路板处理后的程序的运行结果。图中使用了八个八段数码管,可以显示八个0-15的数字。使用数码管可以直观的得到程序运行所显示的结果.也可以显示预置在学习板上的程序,主要通过16个开关来控制。 四、硬件调试 1、是否短路 用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。 2、焊接顺序 焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。 3、器件功能 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DA TASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DA TASHEET,分析一下时序是否一致,同时分析一下命令字是否正确 6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,

51单片机课程设计报告

成绩: 单片机原理及应用课程设计 课程名<<单片机原理及应用>> 学部机械与电子信息工程学部 专业移动通信技术 学号 姓名 指导教师 日期

一、设计任务与要求 1.任务:制作并调试51单片机学习板 2.要求: (1)了解并能识别学习板上的各种元器件,会读元器件标示; (2)会看电路原理图; (3)制作51单片机学习板; (4)学会使用Keil C软件下载调试程序; 用调试程序将51单片机学习板调试成功。 二、实验内容 (5)AT89S52芯片工作电路,利用晶振提供控制信号。 (6)10引脚下载口与A T89S52芯片相关引脚相连完成下载电路。 (7)8个10K电阻与AT89S52芯片P0口相连,利用上拉电阻组成上拉电路。 (8)使用开关与5.1K电阻连成外部中断0、1电路和复位电路。 (9)利用16个开关做成键盘,实现输入号对已编程的AT89S52芯片的控制并通过数码管显示0--F。 (10)用2片74HC573N具有锁存功能芯片与8个数码管相连,通过编程的A T89S52位选和段选实现输出信号的显示功能。 (11)使用74HC573N锁存功能结合ULN2003AG芯片8非门芯片和74HC04N6非门芯片与4个2N5551三极管实现对步进电机的控制,和控制步进电机的信号结 合LED输出显示的功能。 (12)6、利用1片74HC573N芯片与8个共阴极LED实现跑马灯功能。 三、总原理图 1.总原理图

四、硬件调试 1、是否短路 用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。 2、焊接顺序 焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试-- 另一功能部件的焊接,这样容易找到问题的所在。 3、器件功能 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确 6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。 五、软件调试 1、设置硬件仿真环境 设置硬件仿真环境的具体操作步骤如下: 首先,点击所建工程:Project菜单中的Options for Target…Targer 1?,出现工程的配置窗口,

STC89C51单片机的数字音乐盒设计(含代码)

HEFEI UNIVERSITY FPGA综述报告 系别电子信息与电气工程系任课教师汪济洲 班级 姓名 成绩 日期

数字音乐盒设计 摘要:本设计是一个基于STC89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。使用两个按键控制音乐盒,一个用来切换歌曲,另一个用来切换8路LED的变化花样,本音乐盒共有两首歌曲,花样灯花样共计4种。播放歌曲时,蜂鸣器发出某个音调,与之对应的LED亮起。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。 关键字:音乐盒 STC89C51单片机 KEIL PROTEUS 音调

目录 1概述 (3) 1.1设计方案 (3) 1.2研究内容 (3) 1.3音乐盒的功能结构图 (3) 2硬件设计 (4) 2.1总体设计框图 (4) 2.2各部分硬件设计及其原理 (4) 2.2.1 STC89C51简介 (4) 2.2.2 LED显示电路设计与原理 (5) 2.2.3 时钟振荡电路 (5) 2.3硬件电路图及功能 (6) 3软件设计 (7) 3.1音调、节拍以及编码的确定方法 (7) 4.1.1 音调的确定 (7) 4.1.2 节拍的确定 (8) 4.1.3 编码 (9) 4.2软件程序设计 (10) 4.2.1 程序流程图及相应代码块 (10) 4.2.2 程序源代码(见附录A) (14) 5调试 (14) 5.1检查硬件连接 (14) 5.2检查软件系统 (14) 5.3测试结果 (14) 5.3.1.总体运行图 (14) 5.3.2.花样灯4种花样图 (15) 参考文献 (16) 附录A 程序源代码及注释 (16)

51单片机应用设计课后答案

第一章单片机概述 1.2除了单片机这一名称之外,单片机还可称为(微控制器)和(嵌入式控制器)。 1.3单片机与普通计算机的不同之处在于其将(微处理器)、(存储器)和(各种输入输出接 口)三部分集成于一块芯片上。 4、单片机的发展大致分为哪几个阶段? 答:单片机的发展历史可分为四个阶段: 第一阶段(1974年----1976年):单片机初级阶段。 第二阶段(1976年----1978年):低性能单片机阶段。 第三阶段(1978年----现在):高性能单片机阶段。 第四阶段(1982年----现在):8位单片机巩固发展及16位单片机、32位单片机推出阶段 1.5单片机根据其基本操作处理的位数可分为哪几种类型? 答:单片机根据其基本操作处理的位数可分为:1位单片机、4位单片机、8位单片机、16位 单片机和32位单片机。 1.6 MCS-51系列单片机的基本芯片分别为哪几种?它们的差别是什么? 答:基本芯片为8031、8051、8751。 8031内部包括1个8位cpu、128BRAM,21个特殊功能寄存器(SFR)、4个8位并行I/O 口、1 个全双工串行口,2个16位定时器/计数器,但片内无程序存储器,需外扩EPROM芯片。 8051是在8031的基础上,片内又集成有4KBROM,作为程序存储器,是1个程序不超过4KB 的小系统。 8751是在8031的基础上,增加了4KB的EPROM,它构成了1个程序小于4KB的小系统。用户可以将程序固化在EPROM中,可以反复修改程序。 1.7 MCS-51系列单片机与80C51系列单片机的异同点是什么? 答:共同点为它们的指令系统相互兼容。不同点在于MCS-51是基本型,而80C51采用CMOS 工艺,功耗很低,有两种掉电工作方式,一种是CPU停止工作,其它部分仍继续工作;另 一种是,除片内RAM继续保持数据外,其它部分都停止工作。 1.8 8051与8751的区别是(C) (A、内部数据存储单元数目的不同(B、内部数据存储器的类型不同 (C)内部程序存储器的类型不同(D、内部的寄存器的数目不同 1.9在家用电器中使用单片机应属于微型计算机的(B) (A、辅助设计应用(B、测量、控制应用(C)数值计算应用(D)数据处理应用 1.10说明单片机主要应用在哪些领域? 答:单片机主要运用领域为:工业自动化;智能仪器仪表;消费类电子产品;通信方面;武 器装备;终端及外部设备控制;多机分布式系统。 第二章MCS-51单片机的硬件结构 2.1 MCS-51单片机的片内都集成了哪些功能部件?各个功能部件的最主要的功能是什么?答:功能部件如下:微处理器(CPU);数据存储器(RAM );程序存储器(ROM/EPROM , 8031没有此部件),4个8位并行I/O 口(P0口、P1 口、P2口、P3口);1个全双工的串行口;2个16位定时器/计数器;中断系统;21个特殊功能寄存器(SFR)。 各部件功能:CPU (微处理器)包括了运算器和控制器两大部分,还增加了面向控制的处理 功能,不仅可处理字节数据,还可以进行位变量的处理;数据存储器(RAM、片内为128B (52系列的为256B),片外最多可外扩64KB。数据存储器来存储单片机运行期间的工作变 量、运算的中间结果、数据暂存和缓冲、标志位等;程序存储器(ROM/EPROM、用来存储

相关主题