/*
project:万能历
作者:红云
时间:2011.7.10
功能:万能历,显示年月日时分秒,四个键盘调节月日时分
资源:STC89C52+Nokia5510LCD
*/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCE = P0^0; //片选
sbit RST = P0^1; //复位,0复位
sbit DC = P0^2; //1写数据,0写指令
sbit SDIN = P1^5; //数据
sbit SCLK = P1^7; //时钟
sbit key1=P3^2;//控制月;
sbit key2=P3^3;//控制日;
sbit key3=P3^4;//控制时;
;l
sbit key4=P3^5;//控制分;
static int year=2011,month=7,day=10,hour=18,minute=20,second=30;
static uint num=0;
uchar code Array1024[]={
/*-- 文字: 0 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0xC0,0x30,0x08,0x08,0x08,0x08,0x30,0xC0,0x00,0x00,0x1F,0x60,0x80,0x80,0x80,
0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 1 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x80,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 2 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0xC0,0xA0,0x90,0x88,0x84,
0x83,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 3 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x70,0x80,0x81,0x81,0x81,
0x42,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 4 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x0C,0x0B,0x08,0x88,0x88,
0xFF,0x88,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 5 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x73,0x82,0x81,0x81,0x81,
0x42,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 6 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x80,0x60,0x10,0x08,0x08,0x08,0x08,0x30,0x00,0x00,0x3F,0x42,0x81,0x81,0x81,
0x81,0x42,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 7 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x38,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x38,0x45,0x82,0x82,0x82,
0x82,0x45,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 9 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x61,0x82,0x84,0x84,0x84,
0x44,0x32,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=10x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=10x24 --*/
0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xC1,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code Array1924[]={
/*-- 文字: 年 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x80,0x40,0x30,0x88,0x17,0x12,0x10,0x10,0x10,0xF0,0x10,0x10,0x10,0x90,0x88,
0x08,0x00,0x00,0x00,0x10,0x10,0x10,0x0F,0x11,0x11,0x11,0x11,0x11,0xFF,0x11,0x11,
0x11,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 月 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFE,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x38,0x07,0x04,0x04,0x04,0x04,0x04,0x04,
0x04,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0x03,0x01,0x00,0x00,0x00,0x00,
/*-- 文字: 日 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x00,0x00,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFE,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
0x81,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
/*-- 文字: 时 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0xF8,0x08,0x08,0x08,0xF8,0x28,0x20,0x20,0x20,0x20,0x20,0x20,0xFE,0x20,
0x20,0x20,0x00,0x00,0x00,0xFF,0x21,0x21,0x21,0x7F,0x00,0x00,0x01,0x06,0x04,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x03,0x01,0x00,0x00,0x00,0x00,
/*-- 文字: 分 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x00,0x80,0x40,0x30,0x1C,0x06,0x00,0x00,0x00,0x0E,0x30,0x60,0xC0,0x80,
0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x01,0x81,0x61,0x1D,0x03,0x01,0x01,0x01,0xF1,
0x1F,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
0x01,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 秒 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x40,0x48,0x44,0xFC,0x44,0x42,0x60,0x40,0xC0,0x60,0x00,0xFE,0x02,0x10,0x20,
0x60,0xC0,0x00,0x00,0x10,0x08,0x06,0xFF,0x01,0x02,0x02,0x06,0x01,0x80,0x80,0x4F,
0x20,0x10,0x0C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 0 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0xC0,0x30,0x08,0x08,0x08,0x08,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x1F,0x60,0x80,0x80,0x80,0x80,0x60,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 1 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 2 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xA0,0x90,0x88,0x84,0x83,0xE0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 3 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x70,0x80,0x81,0x81,0x81,0x42,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 4 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0C,0x0B,0x08,0x88,0x88,0xFF,0x88,0x88,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 5 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x73,0x82,0x81,0x81,0x81,0x42,0x3C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 6 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x80,0x60,0x10,0x08,0x08,0x08,0x08,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x42,0x81,0x81,0x81,0x81,0x42,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 7 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0x38,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x38,0x45,0x82,0x82,0x82,0x82,0x45,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 9 --*/
/*-- Trebuchet MS14; 此字体下对应的点阵为:宽x高=19x19 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=19x24 --*/
0x00,0xE0,0x10,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x61,0x82,0x84,0x84,0x84,0x44,0x32,0x0F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void delay(uint ii)
{
uint i,x;
for (x=0;x<ii;x++)
{
for (i=0;i<100;i++);
}
}
void Lcd_Write_Byte(uchar dt,uchar comm)
{
uint i;
SCE=0; //片选
DC=comm;
for(i=0;i<8;i++)
{
if(dt&0x80)
SDIN=1;
else
SDIN=0;
dt<<=1;
SCLK=0;
SCLK=1;
}
DC=1;
SCE=1;
SDIN=1;
}
/*---------------------------------------
LCD_init: 3310LCD初始化
编写日期:20080918
----------------------------------------- */
void Lcd_Init(void)
{
RST=0;
delay(10);
RST=1;
Lcd_Write_Byte(0x21,0);//初始化Lcd,功能设定使用扩充指令100001
Lcd_Write_Byte(0xC6,0);//设定液晶偏置电压11000110
Lcd_Write_Byte(0x06,0);// 110
Lcd_Write_Byte(0x13,0);//(0x10,0);;//1:48 10011
Lcd_Write_Byte(0x20,0);//使用基本指令 100000
Lcd_Write_Byte(0x0C,0);//设定显示模式,正常显示 1100
}
/*-------------------------------------------
LCD_set_XY: 设置LCD坐标函数
输入参数:X:0-83 Y:0-5
编写日期:20080918
---------------------------------------------*/
void LCD_set_XY(uchar X, uchar Y)
{
Lcd_Write_Byte(0x40 | Y, 0);// column 01000000 64 设置RAM的Y地址
Lcd_Write_Byte(0x80 | X, 0);// row 10000000 128 设置RAM的X地址
}
/*------------------------------------------
LCD_clear: LCD清屏函数
编写日期:20080918
--------------------------------------------*/
void LCD_clear(void)
{
uchar k,t;
LCD_set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
Lcd_Write_Byte(0x00,1);
}
}
}
/*---------------------------------------------
LCD_Fill: 填充LCD中所有点
编写日期:20110710
-----------------------------------------------*/
void LCD_Fill(void)
{
uchar k,t;
LCD_set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
Lcd_Write_Byte(0xff,1);
}
}
}
/*---------------------------------------------
LCD_Write_Word: 在屏中写汉字.
在每page页开始的地方写w*h大的字符 (屏大小84*48 6页,每页84列)
编写日期:20110710
-----------------------------------------------*/
LCD_Write_Word(uchar dat,uchar x,uchar page,uchar w,uchar h)
{
uchar j,k,i=0;
for(k=0;k<h/8;k++)
{
LCD_set_XY(x,page++);
for(j=0;j<w;j++)
{
Lcd_Write_Byte(Array1924[dat*57+i++],1);
}
}
}
/*---------------------------------------------
LCD_Write_Digit: 在屏中写数字.
在每page页开始的地方写w*h大的字符 (屏大小84*48 6页,每页84列)
编写日期:20110710
-----------------------------------------------*/
LCD_Write_Digit(uchar dat,uchar x,uchar page,uchar w,uchar h)
{
uchar j,k,i=0;
for(k=0;k<h/8;k++)
{
LCD_set_XY(x,page++);
for(j=0;j<w;j++)
{
Lcd_Write_Byte(Array1024[dat*30+i++],1);
}
}
}
/*---------------------------------------------
LCD_DisplayYear(int year):显示年
编写日期:20110710
-----------------------------------------------*/
LCD_DisplayYear(int year)
{
LCD_Write_Digit(year/1000, 0, 0,10,24);//2
LCD_Write_Digit(year/100%10,10,0,10,24);//0
LCD_Write_Digit(year/10%10, 20,0,10,24);//1
LCD_Write_Digit(year%10, 30,0,10,24);//1
LCD_Write_Word(0, 40,0,19,24);//年
}
/*---------------------------------------------
LCD_DisplayMonDay(int month,int day):显示月日
编写日期:20110710
-----------------------------------------------*/
LCD_DisplayMonDay(int month,int day)
{
LCD_Write_Digit(month/10, 0, 2,10,24);//0
LCD_Write_Digit(month%10, 10,2,10,24);//7
LCD_Write_Word(1, 20,2,19,24);//月
LCD_Write_Digit(day/10, 39,2,10,24);//1
LCD_Write_Digit(day%10, 49,2,10,24);//0
LCD_Write_Word(2, 59,2,19,24);//月
}
/*---------------------------------------------
LCD_DisplayTime(int hour,int minute):显示时分
编写日期:20110710
-----------------------------------------------*/
LCD_DisplayTime(int hour,int minute,int second)
{
LCD_Write_Digit(hour/10, 0, 4,10,24);//0
LCD_Write_Digit(hour%10, 10,4,10,24);//7
LCD_Write_Digit(10, 20,4,10,24);//:?
LCD_Write_Digit(minute/10,30,4,10,24);//1
LCD_Write_Digit(minute%10,40,4,10,24);//0
LCD_Write_Digit(10, 50,4,10,24);//:
LCD_Write_Digit(second/10,60,4,10,24);//1
LCD_Write_Digit(second%10,70,4,10,24);//0
}
/*---------------------------------------------
TimeInit(void)定时器初始化(选哪个定时器好?)
编写日期:20110710
-----------------------------------------------*/
void TimeInit(void)
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;//开定时中断;
TR0=1;
}
/*---------------------------------------------
Int0_time(void)定时器中断函数(具体时间如何?)
编写日期:20110710
-----------------------------------------------*/
void Int0_time() interrupt 1 //定时中断;
{
TH0=(65536-45872)/256; //50MS
TL0=(65536-45872)%256;
num++;
if(num>=20)//每秒
{
second++;
if(second>=60)
{
minute++;
if(minute==60)
{
hour++;
if(hour==24)
{
day++;
if(day==30)//约定日期为30天一个月
{
month++;
if(month==12)
{
year++;
}
day=1;
}
hour=1;
}
minute=1;
}
second=1;
}
num=0;
}
}
void KeyScan(void)
{
if(key1==0)//重启;
{
delay(10); //用多少时间合适;为什么? 抖动10ms
if(key1==0)
{
month++;
if(month>=24)month=1;
while(!key1);
}
}
if(key2==0)//暂停;
{
delay(10);
if(key2==0)
{
day++;
if(day>=30)day=1;
while(!key2);
}
}
if(key3==0)//停止;
{
delay(10);
if(key3==0)
{
hour++;
if(hour>=24)hour=1;
while(!key3);
}
}
if(key4==0)//停止;
{
delay(10);
if(key4==0)
{
minute++;
if(minute>=60)minute=1;
while(!key4);
}
}
}
/*---------------------------------------------
main()主函数
编写日期:20110710
-----------------------------------------------*/
void main()
{
Lcd_Init();
LCD_clear();
TimeInit();
while(1)
{
LCD_DisplayYear(year);//要消耗时间
LCD_DisplayMonDay(month,day); //要消耗时间
LCD_DisplayTime(hour,minute,second); //要消耗时间
KeyScan();//要消耗时间
}
}
posted on 2011-07-10 18:43
红云 阅读(121)
评论(0) 编辑 收藏 引用 所属分类:
51/ARM