📄 new0401.c
字号:
//改过的我加*******
#include<at89x51.h>
#include<intrins.h>
#include<absacc.h>
#define adrlcd1c XBYTE [0xfcff] //LCD控制字地址1
#define adrlcd2c XBYTE [0xfaff] //LCD控制字地址2
#define adrlcd1d XBYTE [0xfdff] //LCD数据地址1
#define adrlcd2d XBYTE [0xfbff] //LCD数据地址2
#define sxuchar static unsigned char xdata
#define suchar static unsigned char
#define suint static unsigned int
#define uchar unsigned char
#define uint unsigned int
#define ucode unsigned char code
sbit ACC7=ACC^7; //忙位标志sbit key1=P2^3;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit moto=P1^3;
sbit sound=P1^4;
sbit black=P1^5;
static bit l,m,n;
suchar j,i;
uchar second,minute,hour,day,week,mouth,shift,change,alarm_hour1,alarm_min1,alarm_hour2,alarm_min2,alarm_day,conver,mus;//*******加了个conver和 mus
uint year;
char now_second;
bit mode,sz_flag,disp_flag,zf_flag,clr,alarm_switch,clr;
//=======================
//数字
//宋体12;点阵为:宽x高=8x16
//=======================
ucode num0[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00}; //0
ucode num1[16]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}; //1
ucode num2[16]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00}; //2
ucode num3[16]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00}; //3
ucode num4[16]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00}; //4
ucode num5[16]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00}; //5
ucode num6[16]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00}; //6
ucode num7[16]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00}; //7
ucode num8[16]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00}; //8
ucode num9[16]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00}; //9
ucode colon[16]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};
ucode space[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //显示空格
ucode numa[16]={0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x3F,0x00,0x00};
//=============================
//英语
//ASCII字体,大小8*16
//=============================
ucode enga[16]={ /*-- 英语: a --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x1E,0x22,0x42,0x42,0x3F,0x00,0x00};
ucode engp[16]={ /*-- 英语: p --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD8,0x64,0x42,0x42,0x42,0x44,0x78,0x40,0xE0};
ucode engm[16]={ /*-- 英语: m --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x49,0x49,0x49,0x49,0x49,0xED,0x00,0x00};
//============================
//文字
//16*16
//============================
ucode dnum1[32]={ /*-- 文字: 一 --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
ucode dnum2[32]={ /*-- 文字: 二 --*/
0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00};
ucode dnum3[32]={ /*-- 文字: 三 --*/
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00};
ucode dnum4[32]={ /*-- 文字: 四 --*/
0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00};
ucode dnum5[32]={ /*-- 文字: 五 --*/
0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00};
ucode dnum6[32]={ /*-- 文字: 六 --*/
0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00};
ucode dnum7[32]={ /*-- 文字: 日 --*/
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00};
ucode char1[32]={ /*-- 文字: 振 --*/
0x08,0x08,0x08,0xFF,0x48,0x28,0xFE,0x42,0xD2,0xD2,0x52,0x52,0x52,0x52,0x42,0x00,
0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0x00,0xFF,0x40,0x23,0x04,0x1C,0x63,0x22,0x00};
ucode char2[32]={ /*-- 文字: 动 --*/
0x20,0x24,0x24,0xE4,0x24,0x24,0x24,0x20,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
0x08,0x1C,0x0B,0x08,0x0C,0x05,0x4E,0x24,0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x00};
ucode char3[32]={ /*-- 文字: 闹 --*/
0x00,0x00,0xF9,0x12,0x90,0x92,0x96,0xFA,0x92,0x92,0x92,0x12,0x02,0xFE,0x00,0x00,
0x00,0x00,0xFF,0x00,0x1F,0x00,0x00,0x7F,0x00,0x08,0x1F,0x40,0x80,0x7F,0x00,0x00};
ucode char4[32]={ /*-- 文字: 钟 --*/
0x40,0x30,0x2C,0xEB,0x28,0x28,0x00,0xF8,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,
0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x00,0x00};
ucode char5[32]={ /*-- 文字: 关 --*/
0x00,0x10,0x10,0x10,0x11,0x1E,0x14,0xF0,0x10,0x18,0x17,0x12,0x18,0x10,0x00,0x00,
0x01,0x81,0x41,0x21,0x11,0x09,0x05,0x03,0x05,0x09,0x31,0x61,0xC1,0x41,0x01,0x00};
ucode char6[32]={ /*-- 文字: 闭 --*/
0x00,0x00,0xF9,0x02,0x46,0x40,0x42,0x42,0xFA,0x42,0x42,0x42,0x02,0xFE,0x00,0x00,
0x00,0x00,0xFF,0x00,0x04,0x04,0x12,0x21,0x1F,0x00,0x00,0x40,0x80,0x7F,0x00,0x00};
ucode char7[32]={ /*-- 文字: 年 --*/
0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00};
ucode char8[32]={ /*-- 文字: 月 --*/
0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00};
ucode char9[32]={ /*-- 文字: 日 --*/
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00};
ucode char10[32]={ /*-- 文字: 模 --*/
0x10,0xD0,0xFF,0x50,0x90,0x04,0xF4,0x54,0x5F,0x54,0x54,0x5F,0xF4,0x04,0x00,0x00,
0x03,0x00,0xFF,0x00,0x00,0x84,0x85,0x45,0x35,0x0F,0x15,0x25,0x65,0xC4,0x44,0x00};
ucode char11[32]={ /*-- 文字: 式 --*/
0x00,0x08,0x88,0x88,0x88,0x88,0x88,0x08,0xFF,0x08,0x09,0x0E,0x0A,0x08,0x00,0x00,
0x00,0x20,0x60,0x30,0x1F,0x10,0x08,0x08,0x00,0x07,0x18,0x20,0x40,0x80,0x70,0x00};
ucode char12[32]={ /*-- 文字: 设 --*/
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00};
ucode char13[32]={ /*-- 文字: 置 --*/
0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00,
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00};
ucode char14[32]={ /*-- 文字: 声 --*/
0x02,0x12,0xD2,0x52,0x52,0x52,0x52,0xDF,0x52,0x52,0x52,0x52,0xD2,0x12,0x02,0x00,
0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00};
ucode char15[32]={ /*-- 文字: 音 --*/
0x40,0x40,0x44,0x44,0x4C,0x74,0x44,0x45,0x46,0x64,0x5C,0x44,0x44,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00};
ucode char16[32]={ /*-- 文字: 振 --*/
0x00,0x00,0x00,0xE0,0x00,0xE0,0x04,0xE4,0xE4,0xE4,0x04,0xFC,0x00,0xFC,0x00,0x00,
0x00,0x00,0x00,0x07,0x00,0x07,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00};
ucode char17[32]={ /*-- 文字: 声 --*/
0xF0,0x08,0x04,0xE4,0x10,0xC0,0xC0,0x10,0xE4,0x04,0x08,0xF0,0x00,0x00,0x00,0x00,
0x03,0x04,0x08,0x09,0x02,0x00,0x00,0x02,0x09,0x08,0x04,0x03,0x00,0x00,0x00,0x00};
ucode char18[32]={ /*-- 文字: 时 --*/
0x00,0x10,0x00,0x10,0x7C,0x10,0x44,0x10,0x47,0xFE,0x44,0x10,0x7C,0x10,0x45,0x10,
0x44,0x90,0x44,0x90,0x7C,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x50,0x00,0x20};//*********加的
ucode char19[32]={ /*-- 文字: 制 --*/
0x24,0x04,0x34,0x04,0x24,0x24,0x3F,0xA4,0x44,0x24,0x04,0x24,0x7F,0xA4,0x04,0x24,
0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84,0x27,0x84,0x05,0x14,0x04,0x08};//*********加的
ucode char20[32]={ /*-- 文字: 曲 --*/
0x04,0x40,0x04,0x40,0x04,0x40,0x3F,0xFC,0x24,0x44,0x24,0x44,0x24,0x44,0x24,0x44,
0x3F,0xFC,0x24,0x44,0x24,0x44,0x24,0x44,0x24,0x44,0x3F,0xFC,0x20,0x04,0x00,0x00};//*********加的
//=====================================
//写LCD片1数据函数
//入口参数:d=数据
//出口参数:将数据写入adrlcd1d
//=====================================
void w_data1(uchar d)
{
do ACC=adrlcd1c; //判断片1是否忙
while(ACC7==1);
adrlcd1d=d; //送数据给片1
}
//======================================
//写LCD片2数据函数
//入口参数:d=数据
//出口参数:将数据写入adrlcd2d
//======================================
void w_data2(uchar d)
{
do ACC=adrlcd2c; //判断片1是否忙
while(ACC7==1);
adrlcd2d=d; //送数据给片1
}
//======================================
//送LCD片2控制字函数
//入口参数:c=控制字
//出口参数:将控制字写入adrlcd2c
//======================================
void w_code2(uchar c)
{
do ACC=adrlcd2c; //判断片1是否忙
while(ACC7==1);
adrlcd2c=c; //送控制字给片1
}
//======================================
//送LCD片1控制字函数
//入口参数:c=控制字
//出口参数:将控制字写入adrlcd1c
//======================================
void w_code1(uchar c)
{
do ACC=adrlcd1c; //判断片1是否忙
while(ACC7==1);
adrlcd1c=c; //送控制字给片1
}
//======================================
//向地址指针处写数据函数
//入口参数:p=将显示的数据
//出口参数: 将p写入指定地址
//======================================
void lcd_wd(uchar p,uchar x,uchar y)
{
y=y;
if(x<61)
w_data1(p);
else if(x<122&x>=61)
w_data2(p);
else return;
}
//======================================
//LCD显示初始化函数
//======================================
void lcd_reset(void)
{
w_code1(0xc0);
w_code2(0xc0); //设置显示初始行为0行
w_code1(0xa0);
w_code2(0xa0); //设置列序方向为正向
w_code1(0xa4);
w_code2(0xa4); //设置显示模式为正常显示
w_code1(0xa9);
w_code2(0xa9); //设置显示占空比为1/32
w_code1(0xaf);
w_code2(0xaf); //开显示
}
//======================================
//显示指针定位函数
//入口参数: XPOS=显示列号; YPOS=显示页号
//出口参数: 地址列指针,页指针设置完毕
//======================================
void lcd_pos(uchar x,uchar y)
{
if(x<61)
{
w_code1(x); //地址列指针=000H+列码(0-80)
w_code1(y+0xb8); //地址页指针=0B8H+页码(0-3)
}
else
{
w_code2(x-61);
w_code2(y+0xb8);
}
}
//=========================================================
//定位并反向显示一个字节数据函数
//入口参数: X=显示列号; Y=显示页号; p=将显示的数据
//=========================================================
void lcd_wr1(uchar p,uchar x,uchar y)
{
lcd_pos(x,y);
lcd_wd(0xff-p,x,y);
}
void lcd_wr2(uchar p,uchar x,uchar y)
{
lcd_pos(x,y);
lcd_wd(p,x,y);
}
//=========================================================
//定位并显示一个字节数据函数
//入口参数: X=显示列号; Y=显示页号; p=将显示的数据
//=========================================================
//====================
//清LCD屏幕函数
//====================
void clear(void)
{
uchar m,n;
for(m=0;m<4;m++)
{
for(n=0;n<127;n++)
lcd_wr2(0x00,n,m); //00h:白屏,0ffh,黑屏
}
}
//============================================================
//显示英文或数字函数
//入口参数:数组首地址array,起始坐标(x,y)
//============================================================
void disnum(uchar *array,uchar x,uchar y)
{
uchar i;
for(i=0;i<8;i++) //数字或英文字宽
{
if(zf_flag==1) //正向显示
{
if(x<61)
{w_code1(i+x);
w_code1(y+0xb8);
}
else
{w_code2(i+x);
w_code2(y+0xb8);
y=y;
if(x<61)
w_data1(*(array+i));
else if(x<122&x>61)
w_data2(*(array+i));
else return;
if(x<61)
{w_code1(i+x);
w_code1(y+1+0xb8);
}
else
{w_code2(i+x-61);
w_code2(y+1+0xb8);
}
}
else //反向显示
{
lcd_wr1(*(array+i),i+x,y);
lcd_wr1(*(array+8+i),i+x,y+1);
}
}
}
//============================================================
//显示汉字函数
//入口参数:数组首地址array,起始坐标(x,y)
//============================================================
void dishz(ucode *array,uchar x,uchar y)
{
uchar i;
for(i=0;i<16;i++) //汉字字宽
{
if(zf_flag==1) //正向显示
{
lcd_wr2(*(array+i),i+x,y);
lcd_wr2(*(array+16+i),i+x,y+1);
}
else //反向显示
{
lcd_wr1(*(array+i),i+x,y);
lcd_wr1(*(array+16+i),i+x,y+1);
}
}
}
//==============================
//延时函数
//延时基础时间:5ms
//==============================
void delay5ms(uchar a)
{
uchar p;
uint i;
for(p=0;p<a;p++)
{
for(i=0;i<=1000;i++)
{_nop_();}
}
}
//===================
//显示:2005年01月01日 00:00:00 //**********改位2005年
//===================
void freshdis1(uchar posit)
{
bit bit_temp;
bit_temp=zf_flag;
switch(posit)
{
case 0: //正常显示年月日
{
zf_flag=1;
disnum(num0+year/1000*16,0,0);
disnum(num0+year%1000/100*16,8,0);
disnum(num0+year%100/10*16,16,0);
disnum(num0+year%10*16,24,0);
dishz(char7,32,0);
disnum(num0+mouth/10*16,48,0);
disnum(num0+mouth%10*16,56,0);
dishz(char8,64,0);
disnum(num0+day/10*16,80,0);
disnum(num0+day%10*16,88,0);
dishz(char9,96,0);
if(conver) //**********改的
{disnum(num0+hour/10*16,32,2);
disnum(num0+hour%10*16,40,2);} //**********改的
else if(hour<=12)
dishz(char20, //**********改的
disnum(num0+hour/10*16,32,2); //**********改的
disnum(num0+hour%10*16,32,2);} //**********怎么提取字模显示am和pm在时间前呢?
disnum(colon,48,2);
disnum(num0+minute/10*16,56,2);
disnum(num0+minute%10*16,64,2);
disnum(colon,72,2);
disnum(num0+second/10*16,80,2);
disnum(num0+second%10*16,88,2);
disnum(space,96,2);
dishz(dnum1+week*32,104,2);
break;
}
case 1: //校时
{
zf_flag=0;
disnum(num0+hour/10*16,32,2);
disnum(num0+hour%10*16,40,2);
break;
}
case 2: //校分
{
zf_flag=0;
disnum(num0+minute/10*16,56,2);
disnum(num0+minute%10*16,64,2);
break;
}
case 3: //校秒
{
zf_flag=0;
disnum(num0+second/10*16,80,2);
disnum(num0+second%10*16,88,2);
break;
}
case 4: //校周
{
zf_flag=0;
dishz(dnum1+(week)*32,104,2);
break;
}
case 5: //校年
{
zf_flag=0;
disnum(num0+year/1000*16,0,0);
disnum(num0+year%1000/100*16,8,0);
disnum(num0+year%100/10*16,16,0);
disnum(num0+year%10*16,24,0);
break;
}
case 6: //校月
{
zf_flag=0;
disnum(num0+mouth/10*16,48,0);
disnum(num0+mouth%10*16,56,0);
break;
}
case 7: //校日
{
zf_flag=0;
disnum(num0+day/10*16,80,0);
disnum(num0+day%10*16,88,0);
break;
}
}
zf_flag=bit_temp;
}
//==================
//显示: 闹钟设置1 00:00
//==================
void freshdis2(uchar posit)
{
bit bit_temp;
bit_temp=zf_flag;
switch(posit)
{
case 0:
{
disnum(space,0,0);
disnum(space,8,0);
disnum(space,16,0);
disnum(space,88,0);
disnum(space,96,0);
disnum(space,104,0);
disnum(space,72,2);
disnum(space,80,2);
disnum(space,88,2);
disnum(space,104,2);
disnum(space,112,2);
dishz(char3,24,0);
dishz(char4,40,0);
dishz(char12,56,0);
dishz(char13,72,0);
disnum(num1,88,0);
if(conver) //*********新加的
{disnum(num0+alarm_hour1/10*16,32,2); //*********新加的
disnum(num0+alarm_hour1%10*16,40,2);} //*********新加的
else //*********新加的
{alarm_hour1=alarm_hour1>12? (alarm_hour1-12):alarm_hour1;//*********新加的
disnum(num0+alarm_hour1/10*16,32,2);//*********新加的
disnum(num0+alarm_hour1%10*16,32,2);//*********新加的
} //*********新加的
disnum(colon,48,2);
disnum(num0+alarm_min1/10*16,56,2);
disnum(num0+alarm_min1%10*16,64,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -