本人一共用到了lcd12864(无字库),cs1,cs2片选,5个按键
可以实现功能,进行闹钟设置,进行定时,根据日历显示周几,根据时间显示上午下午,其中时间大于十二小时,显示下午,小于12小时显示上午。
本代码的lcd12864程序是借鉴的,其他模块是是自己写的,由于这个代码是我在实验课上做出来的,可能程序比较冗杂,请见量
下面是程序文件和仿真程序,还有视频展示,我放在百度网盘里了,提取码:dgwo
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define port P0 //DB0~DB7数据口
sbit e=P2^7;//使能
sbit rw=P2^6;//读写
sbit rs=P2^5;//数据/命令
sbit cs2=P2^4;//片选 电路板上CS2和CS1线需要接反
sbit cs1=P2^3;
sbit control=P3^3;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit beep=P1^3;
sbit k4=P1^4;
//sbit busy=P0^7;//检测忙
uchar flag=0,clearflag=255,set=0,seta,month=10,day=1;
uint year=2023,W;
char G=-1;
uchar ms=0,s=58,m=59,h=23 ,back,ams=0,as=0,am=0,ah=0,tms=0,ts=10,tm=0,th=0,stop;
uchar code hz[][32]=
{
/* [字库]:[HZK1616宋体] [数据排列]:从左到右从上到下 [取模方式]:纵向8点下高位 [正负反色]:否 [去掉重复后]共3个字符
[总字符库]:"时间:"*/
/*-- ID:0,字符:"时",ASCII编码:CAB1,对应字:宽x高=16x16,画布:宽W=16 高H=16,共32字节*/
0x00,0xfc,0x84,0x84,0x84,0xfe,0x14,0x10,0x90,0x10,0x10,0x10,0xff,0x10,0x10,0x00,
0x00,0x3f,0x10,0x10,0x10,0x3f,0x00,0x00,0x00,0x23,0x40,0x80,0x7f,0x00,0x00,0x00,
/*-- ID:1,字符:"间",ASCII编码:BCE4,对应字:宽x高=16x16,画布:宽W=16 高H=16,共32字节*/
0x00,0xf8,0x01,0x02,0xf6,0x10,0x12,0x12,0x12,0x12,0xfa,0x12,0x02,0xff,0x02,0x00,
0x00,0xff,0x00,0x00,0x3f,0x11,0x11,0x11,0x11,0x11,0x3f,0x40,0x80,0x7f,0x00,0x00,
/*-- ID:2,字符:":",ASCII编码:A3BA,对应字:宽x高=16x16,画布:宽W=16 高H=16,共32字节*/
0x00,0x00,0x00,0x00,0x80,0xc0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x31,0x7b,0x7b,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code num[][16]=
{
/* [字库]:[ASC8x16E字库] [数据排列]:从左到右从上到下 [取模方式]:纵向8点下高位 [正负反色]:否 [去掉重复后]共10个字符
[总字符库]:"0123456789"*/
/*-- ID:0,字符:"0",ASCII编码:30,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0xf0,0x08,0x04,0x04,0x08,0xf0,0x00,0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,
/*-- ID:1,字符:"1",ASCII编码:31,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x00,0x08,0x08,0xfc,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1f,0x10,0x10,0x00,
/*-- ID:2,字符:"2",ASCII编码:32,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x38,0x04,0x04,0x04,0x84,0x78,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x18,0x00,
/*-- ID:3,字符:"3",ASCII编码:33,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x18,0x04,0x84,0x84,0x44,0x38,0x00,0x00,0x0c,0x10,0x10,0x10,0x11,0x0e,0x00,
/*-- ID:4,字符:"4",ASCII编码:34,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x00,0xc0,0x20,0x18,0xfc,0x00,0x00,0x00,0x03,0x02,0x12,0x12,0x1f,0x12,0x12,
/*-- ID:5,字符:"5",ASCII编码:35,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0xfc,0x44,0x44,0x44,0x84,0x04,0x00,0x00,0x0c,0x10,0x10,0x10,0x08,0x07,0x00,
/*-- ID:6,字符:"6",ASCII编码:36,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0xf0,0x88,0x44,0x44,0x48,0x80,0x00,0x00,0x07,0x08,0x10,0x10,0x10,0x0f,0x00,
/*-- ID:7,字符:"7",ASCII编码:37,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x0c,0x04,0x04,0xc4,0x34,0x0c,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,
/*-- ID:8,字符:"8",ASCII编码:38,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00,0x00,0x0e,0x11,0x10,0x10,0x11,0x0e,0x00,
/*-- ID:9,字符:"9",ASCII编码:39,对应字:宽x高=8x16,画布:宽W=8 高H=16,共16字节*/
0x00,0xf8,0x04,0x04,0x04,0x88,0xf0,0x00,0x00,0x00,0x09,0x11,0x11,0x08,0x07,0x00
};
uchar code week[][16]=
{
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0xF8,0x20,0xC0,0x20,0xF8,0xF8,0x00,0x0F,0x0F,0x00,0x01,0x00,0x0F,0x0F,
/*-- 文字: o --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xC0,0xE0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,
/*-- 文字: n --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0xE0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,
/*-- 文字: T --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0xF8,0xF8,0x08,0x08,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,
/*-- 文字: u --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x0F,0x00,
/*-- 文字: e --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xC0,0xE0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x07,0x0F,0x09,0x09,0x09,0x01,0x00,
/*-- 文字: W --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0xF8,0x00,0xC0,0x00,0xF8,0xF8,0x00,0x01,0x0F,0x0E,0x01,0x0E,0x0F,0x01,
/*-- 文字: e --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xC0,0xE0,0x20,0x20,0xE0,0xC0,0x00,0x00,0x07,0x0F,0x09,0x09,0x09,0x01,0x00,
/*-- 文字: d --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xC0,0xE0,0x20,0x20,0xF8,0xF8,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x0F,0x00,
/*-- 文字: T --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0xF8,0xF8,0x08,0x08,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,
/*-- 文字: h --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0xF8,0x20,0x20,0xE0,0xC0,0x00,0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,
/*-- 文字: u --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00,0x07,0x0F,0x08,0x08,0x0F,0x0F,0x00,
/*-- 文字: F --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: r --*/
/*-- Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0xE0,0x80,0x40,0x60,0x60,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: i