51单片机音乐万年历制作

发布者:温馨家园最新更新时间:2020-02-11 来源: 51hei关键字:51单片机  音乐万年历 手机看文章 扫描二维码
随时随地手机看文章

一、电源电压4.8V—5.2V,可以直接用电脑USB供电。
二、程序修改说明
1、如果你编译通不过,就是你用的KEIL库文件不全,请换个完整版本的KEIL,或到我店铺购买,本程序是完全编译通过,且没有1个警告;
2、本程序由于农历,节气等数据很占空间,编译后有19K多,请使用程序存储器20K以上的51单片机,比如STC89C55、STC89C58,STC89C516,AT89C55,AT89S54,SST89C58等;
3、如果你的汉字显示不全或乱码,比如“三“显示不了,那是你的KEIL没有打补丁,并不是程序问题,至于什么补丁你可以网上搜或向我索要;
4、在修改位定义的时候需要将Soundplay.h文件下的sbit    BeepIO  = P3^7;  sbit KEY_1 = P2^7;一起修改;
5、蜂鸣器请最好使用无源蜂鸣器或小喇叭,这样音质会很好。
三、生日、节气和节日提示说明
1、本万年历的各种提示会在主界面第四行交替显示,其中生日和节气优先显示。

Altium Designer画的音乐万年历原理图和PCB图如下:(51hei附件中可下载工程文件)

单片机万年历元件清单:
名称    数量    说明
STC89C54(STC89C516)单片机    1    内存≥20K的51单片机都可以
DS1302    1    
DS18B20    1    
40DIP座    1    
8DIP座    1    
3DIP座    1    
20芯座    1    
20芯插针    1    
10K排阻    1    可以不安装
无源蜂鸣器    1    
CR2032电池    1    
电池座    1    
电源座    1    
按键    4    
开关    1    
32768HZ晶振    1    
11.0592MHZ晶振    1    
S8050三极管    1    
30P电容    2    
103电容    1    可以不安装
10uF电解    1    
4.7K电阻    1    
10K电阻    2    
220uF电解    1    可以不安装
PCB    1    
12864液晶    1    ST7920驱动字库液晶

单片机音乐万年历源程序如下:

/*****************************************************************************/

//12864液晶万年历 时钟2010年最新 V5.2版

//设计: 杨黎民

//程序部分开始

//更新日期:2010年9月3

//主要特点:多功能菜单、多风格主界面,生日、节日、节气、农历时段多功能提示,闹钟、音乐、温度、屏幕自检

//5.1增加了调整时间反白和闹钟设置反白显示

//5.2调整了生日和节气优先显示

/****************************************************************************/

//头文件

#include

#include

#include

#include "SoundPlay.h"//音乐文件

#define uchar unsigned char 

#define uint unsigned int

/*****************************************************************************/

//扬声器定义

sbit        beep   = P3^7;//扬声器

/*****************************************************************************/

//温度传感器定义

sbit DQ = P2 ^ 0;//ds18B20

uint tvalue;//温度值

uchar tflag,flagdat,t,hh1;//温度正负标志

/*****************************************************************************/

//键盘引脚定义

//sbit KEY_1 = P2^7;  //左上,在音乐文件SoundPlay.h中已定义

sbit KEY_2 = P2^6;         //左下

sbit KEY_3 = P2^5;         //右上

sbit KEY_4 = P2^4;         //右下

/****************************************************************************/

//定义DS1302时钟接口

sbit clock_clk = P2 ^ 1;//ds1302_clk(时钟线)

sbit clock_dat = P2 ^ 2;//ds1302_dat(数据线)

sbit clock_Rst = P2 ^ 3;//ds1302_Rst(复位线)

//定义累加器A中的各位

sbit a0   = ACC ^ 0;

sbit a1   = ACC ^ 1;

sbit a2   = ACC ^ 2;

sbit a3   = ACC ^ 3;

sbit a4   = ACC ^ 4;

sbit a5   = ACC ^ 5;

sbit a6   = ACC ^ 6;

sbit a7   = ACC ^ 7;

/****************************************************************************/

//定义全局变量

unsigned char yy,mo,dd,xq,hh,year,year1;//定义时间映射全局变量(专用寄存器

unsigned char shi,ge,sec_temp,min_temp,hour_temp,secl,selx,e=0,hh1,mm1,k,mm,ss,n;

char n1,n2;

bit w = 0; //调时标志位

static unsigned char menu = 0;//定义静态小时更新用数据变量

static unsigned char keys = 0;//定义静态小时更新用数据变量

static unsigned char timecount = 0;//定义静态软件计数器变量

/****************************************************************************/

//-----------------------------------------------

//TS12864并口相关设定//

#define        BUSY_FLAG        P0_7                                                //液晶模块忙标志

#define        MPU_RS_CH        P1_5                                                //寄存器选择输入

#define        MPU_RW_CH        P1_6                                                //读写控制

#define        MPU_ENABLE        P1_7                                                //使能控制

#define        LCD_DATA        P0                                                        //液晶数据口

//-----------------------------------------------

#define LOW                        0                                                        //低电平

#define        HIGH                1                                                        //高电平

#define        OFF                        0                                                        //逻辑关

#define        ON                        1                                                        //逻辑开

//-----------------------------------------------

//液晶模块指令集定义

#define        cClearDisplay        0x01                                        //清显示指令

#define        cEntryModeSet        0x06                                        //设置输入模式

#define        cDisplayOnCtrl        0x0c                                        //设置开显控制

#define        cFunctionSetB        0x30                                        //功能设定(基本指令)

#define        cFunctionSetE        0x34                                        //功能设定(扩充指令)

#define        cFuncDrawOn                0x36                                        //设置绘图功能

//-----------------------------------------------

uchar xdata lcdPosX, lcdPosY;                                                        //X,Y坐标

uchar xdata halfScr, halfLineCnt, basicBlock;                        //半屏,半屏行数,N*8块

//-----------------------------------------------

//子程序声明和用法

bit scanKey1 (void);

//按键1检测

void procKey (void);

//按键处理子程序

void lcdInit (void);

//初始化LCD子程序

void lcdClear (void);

//清除LCD文本屏幕子程序

void lcdWriteCommand (uchar Command); 

//写入控制命令到LCD子程序

//输入参数:LCD控制指令

void lcdWriteData (uchar Data); 

//写入显示数据到LCD子程序

//输入参数:显示数据

void checkLcdBusy (void); 

//检测LCD忙碌子程序

void displayPhoto (uchar *bmp, uchar bmpCls); 

//全屏显示图形子程序

//输入参数:*bmp=图形数据 

//bmpCls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)

void convertChar (uchar CX, CY, width); 

//字符反白显示

//输入参数:CX=要反白字符的行(0-3)

//CY=要反白字符的列(0-7)

//width=要反白字符的长度(1-16)

void wrPosition (void); 

//坐标写入子程序

void dispString (uchar X, Y, speed, uchar *msg); 

//显示字符串子程序

//输入参数:X=行(0-3), Y=列(0-7), speed=显示速度(毫秒), msg=字符数据

void beepBl (void);

//蜂鸣器响一声子程序

void delayMs (uchar ms); 

//延时(毫秒)子程序

//输入参数:毫秒数

void delaySec (uchar sec); 

//延时(秒)子程序

//输入参数:秒数

void init_dz();

void clear_img();

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

//12864液晶驱动

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

void lcdInit (void)

{

        lcdWriteCommand(cFunctionSetE);

        lcdWriteCommand(cFunctionSetB);

        lcdClear();

        lcdWriteCommand(cEntryModeSet);

        lcdWriteCommand(cDisplayOnCtrl);

        if(k==1){clear_img();lcdClear();

        }

        if(k==0){lcdClear(); clear_img();init_dz();

        }

}

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

void lcdClear (void) 

{

        lcdWriteCommand(cClearDisplay);

}

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

void lcdWriteCommand (uchar Command) 

{

        checkLcdBusy();

        MPU_RS_CH = LOW;

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ..[15]
关键字:51单片机  音乐万年历 引用地址:51单片机音乐万年历制作

上一篇:51单片机+K9F2080U0A制作MP3电路图与源程序
下一篇:单片机酒精浓度测试仪设计

推荐阅读最新更新时间:2024-11-14 22:20

基于89C51单片机、RAM和8251实现无线电台通信卡的设计
当今信息时代,人们需要多种多样的通信手段和设备,常见的不论是有线电话还是无线电台,都为模拟信道,适合传送模块话音信号。目前,通过公用电话网进行计算机通信的技术已经成熟。而无线电台特点是老式电台,在我国使用范围很广,拥有量很大,但其功能单一,不能适应当前数据通信的要求,如何对其进行技术改造,增加数据能信功能,就显得尤为必要。为此,研究设计了无线电台用智能数据通信卡(以下简称通信卡),通过该卡,可给以模拟方式作为话通信的无线电台增加数据通信功能,大大提高了老式电台的性价比。该卡体积小,成本低,可放置于电台内部。 1、通信卡的设计思想 从电台实际工作情况考虑,给电台增加数据通信功能后,应注意解决以下问题: ·不能影响原话音通信功能。
[单片机]
基于89C<font color='red'>51单片机</font>、RAM和8251实现无线电台通信卡的设计
51单片机开发之静态数码管
开发板上这个独立的数码管刚好接在单片机的P0引脚上。 对应关系: P0.0 - A P0.1- B P0.2- C P0.3- D……… 3.7.2 数码管介绍 LED数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。 LED数码管常用的段数一般为7段,有的另加一个小数点 。 LED数码管根据LED的接法不同,分为共阴和共阳两类 。 当前开发板使用的数码管是共阳极。 使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。 图3-
[单片机]
<font color='red'>51单片机</font>开发之静态数码管
IIC总线原理及其在51单片机中的简单应用
1. IIC总线基本概念 1.1总线概述 IIC总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。 1.2总线结构 IIC总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间可以进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这两条总线上。 2. IIC总线协议 2.1数据传输中的主/从机 在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱, IIC总线要通过总线仲裁,以决定由哪一台主机控制总线。连在每一个总线上的电路和模块都有一个唯一地址,它们彼
[单片机]
IIC总线原理及其在<font color='red'>51单片机</font>中的简单应用
MCS-51单片机的存储器组织结构
特点:哈佛结构,程序存储器与数据存储器分开,两者各有一个相互独立的64K(0x0000 ~ 0xFFFF)的寻址空间(准确地说,内部数据存储器与外部数据存储器不是一回事)。 程序存储器: ① 用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。 ② 为只读存储器。注意,这里的“只读”,是指单片机(CPU)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了FLASH ROM,来取代以前所用的ROM、E2PROM等,可方便地进行在线编程(ISP)。 ③ 标准8051的内部程序存储器大小为4KB(0x0000 ~ 0x0FFF);而具体的
[单片机]
十字路口交通信号灯设计
任务描述: 某企业承担了一个十字路口交通灯控制系统设计任务,控制要求:东西向绿灯亮 5s 后,黄灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s 后南北向黄灯闪烁,闪烁5次后亮红灯,东西向绿灯亮,如此往复。请用单片机设计其控制系统并调试运行。 电路原理图 元件清单 C语言程序 #include reg51.h //包含头文件reg51.h,定义51单片机中的专用寄存器 void delay0_5s(); void delay5s(); void main() { unsigned char k; TMOD=0x10; //设置T1为工作方式1 while(1) { P1=0x09; //东
[单片机]
十字路口交通信号灯设计
C51单片机串口通讯注意点
今天在利用C51单片机发数据给PC时,出现了一个小小的问题:如果我要用一个按键来触单片发送5个数据到PC,当单片机复位后,第一次发送的数据总是只有一个数据,而不是5个,当第二次后又正常了。原因是在程序中开了串口中断(ES = 1);大概程序如下: ES = 1; TOMD = 0x20; TR1 = 1; main() {P1.0 = 1; while(P1.0); send(0x00); send(0x01); send(0x02); send(0x03); send(0x04); } 。。。。。。 如果是以上程序,当单片每复位后,按第一次P1.0将只发送00,第二次后会是00,01,02,03,04;
[单片机]
51单片机-液晶屏代码单独文件
同样我们创建好“lcd.c”和“lcd.h”,然后添加进工程文件中。“lcd.c”的代码集合了所有宋老师为我们写好的各种常用函数。 1.lcd.c的代码 #include reg52.h #include lcd.h /* 等待液晶准备好 */ void LcdWaitReady() { unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB;//读取状态字 LCD1602_E = 0; } while
[单片机]
<font color='red'>51单片机</font>-液晶屏代码单独文件
MCS-51单片机汇编语言:逻辑运算指令有哪些?
简单 逻辑操作指令 CLR A ; A← “ 0 ” CPL A ; A← A SWAP A ; A0~3 A4~7 左循环指令 (Rotate Accumulator Left) RL A 带进位左循环指令( Rotate Accumulator Left through Carry flag ) RLC A 右循环指令( Rotate Accumulator Right ) RR A 带进位右循环指令( Rotate A Right with C ) RR
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved