1、Proteus7.8仿真图:
2、程序代码如下:
#include <AT89X51.H>
#include <intrins.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
sbit IO = P1^0;
sbit SCLK = P1^1;
sbit RST = P1^2; //pdf中的CE即是RST
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
sbit beep = P1^3;
sbit k1 = P3^0;
sbit k2 = P3^1;
sbit k3 = P3^2;
sbit k4 = P3^5;
sbit LED = P2^7;
sbit DQ = P3^3;
uchar LCD_DQY_BUFFER1[30]={"DATE 00-00-00 00:00:00 00.0C"}; // buffer缓冲器 年 13个字符
uchar LCD_DQY_BUFFER2[]={"CLOCK 00:00:00 "}; //时间
uchar DateTime[7];
uchar n=0, h=23,m=19,s=0,R=0;
uchar table[]={"0123456789"};
uchar ClockTime[7];
uint dian;
uchar A;
uchar temp[6]={10,10,10,10,10,10};
/*音乐部分*/
uchar timeh,timel;//用于存放定时器的高8位和低8位
uchar code jianpu[]={//定义<<送别>>简谱 每一个值第一位对应简谱的音调,第二位对应拍的长短
0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x92,0x18,0x00,0x00,
0x64,0x84,0x88,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x92,0x18,0x00,0x00,
0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x00,0x00,
0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x92,0x18,0x00,0x00
};
//适合12M的晶振定时器初值表,高低8位分开
uchar code chuzhi[]=
{
0xFF,0xFF, //占位
0xFC,0x43, //中音1-7
0xFC,0xad,
0xFD,0x0a,
0xFD,0x34,
0xFD,0x82,
0xFD,0xc8,
0xFE,0x06,
0xFE,0x21, //高音1
0xFC,0x0C //低音7
};
void timer0() interrupt 1 //定时器0(T0)中断服务程序
{
TH0=timeh; //将timeh赋给计时器的高8位
TL0=timel; //将timel赋给计时器的低8位
beep=~bee