时钟程序.docx

上传人:b****0 文档编号:12861870 上传时间:2023-04-22 格式:DOCX 页数:32 大小:24.45KB
下载 相关 举报
时钟程序.docx_第1页
第1页 / 共32页
时钟程序.docx_第2页
第2页 / 共32页
时钟程序.docx_第3页
第3页 / 共32页
时钟程序.docx_第4页
第4页 / 共32页
时钟程序.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

时钟程序.docx

《时钟程序.docx》由会员分享,可在线阅读,更多相关《时钟程序.docx(32页珍藏版)》请在冰豆网上搜索。

时钟程序.docx

时钟程序

时钟程序

目录

第二页***********************变量声明与定义

第三、第四页***********字符取模样本

第五页*****************DS1302时钟初始化、延时函数

第六、七页***********************液晶程序

第八页**************清除buffer数组数据、整数型转换为字符串型、汉字静态显示、汉字移动、

第九页**************计算字符串长度、求某月天数、星期

第十、页**********************显示年月日、显示闹钟时间、显示时间24进制

第十一页**********************显示时间12进制

第十二页*****************进制转化为16进制存入DS1302*、更改时间、显示更改时间

第十三页*****************选择调整时间的段、闪烁函数

第十四页**********************闹钟设置

第十五、十六页**********************时钟按键控制

第十七页********************切换到菜单界面、切换到工作界面、主函数

 

#include

#include"intrins.h"

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/**************液晶引脚定义**************************/

sbitLCD_SCLK=P1^6;//pin2header5

sbitLCD_SDIN=P1^5;//pin3header4

sbitLCD_DC=P1^4;//pin4header3

sbitLCD_CE=P1^2;//pin5header2

sbitLCD_RST=P1^3;//pin9header1

sbitLCD_LED=P1^7;//pin9header6

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

sbitBELL=P3^5;//pin9header6

sbitKey3=P3^7;

charg_boundary=0;//切换界面标志位

/************实时时钟引脚***************/

sbitT_CLK=P3^2;/*实时时钟时钟线引脚*/

sbitT_IO=P3^3;/*实时时钟数据线引脚*/

sbitT_RST=P3^4;/*实时时钟复位线引脚*/

sbitACC0=ACC^0;

sbitACC7=ACC^7;

/*************************计算器的标志位*******************************/

ucharnum=0;//记录下次输入的数据位置

ucharhang=0;//选择输入数据显示液晶时所属的行

ucharexpression=0;//表达式的长度

ucharExplength=0;//液晶上能够显示的表达式长度

longg_date=0;//记录输入的数据

ucharg_Length=0;//输入数据的长度

charg_count=0;//混合运算次数

charg_calculate=0;//避免连续按运算符出错

charg_Buffer[20];

charg_ExpBuffer[60]={'\0'};//表达式数组

longg_Expdata[20]={0};//表达式数据

longg_ExpBuf[30]={0};//校正后的表达式数组

charfirstcount=0;//防止第二个数据没输入而运行结果的错误操作

ucharOPRT[15]={'#',0};//操作符

longOPND[20]={0};//操作数据

ucharg_Error=0;//除数为0时的标志

ucharg_Input=0;//输入被除数为0时清楚,重新计算标志位

ucharg_RetValue=0;//返回上个界面标志符

ucharg_OPcount=0;//避免数据和ASCII值相等出错

longLastResult=0;//上次运算结果

codecharerror[]="Error:

inputexpressiontoolong!

";//输入数据超长

codecharerror1[]="Error:

inputdatatoolong!

";//

/*************************电梯的标志定义*************************/

ucharstop=0;//50ms定时器

ucharg_UpOrDown=0;//电梯上下标志位

ucharg_level=1;//上升到第几层

ucharstop_level=0;//停留在第几层

/************************时钟的标志位*********************************/

ucharTime=0;//12时间显示和24时间显示转换

ucharTimeToBoundary=1;//由时间显示到主界面之间转换

ucharclock_shi=0;//闹钟时显示

ucharclock_fen=0;//闹钟分显示

ucharg_ClockSign=0;//从设置闹钟界面退出

ucharg_ClockSet=0;//是否设置闹钟标志位

ucharg_ClockShi=0;//记录设置的闹钟时

ucharg_ClockFen=0;//记录设置的闹钟分

ucharg_ClockAlarm=0;//到达闹钟时间报警

ucharg_Glink=0;//闪烁标志位

ucharChoice=3;//选择修改的分,时,秒//初始时时'时'

ucharAdd=0;//选择是时间是增加还是减小

/***********************************调整时间时的X,Y*******************************/

charAdjustX=0;

charAdjustY=0;

charAdjustShi1=0;

charAdjustShi2=0;

charAdjustFen1=0;

charAdjustFen2=0;

charAdjustMiao1=0;

charAdjustMiao2=0;

ucharg_Adjustflag=0;//调整好时间结束标志

 

/*****************************************************取模程序*****************************************/

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

Codeucharfont6x8[][6]={//ASCII码字模

{0x00,0x00,0x00,0x00,0x00,0x00},//sp

……};

codeucharshuzi[]={//0—9和(.:

)数字字模

0x00,0x3E,0x51,0x49,0x45,0x3E,//0

0x00,0x00,0x42,0x7F,0x40,0x00,//1

0x00,0x42,0x61,0x51,0x49,0x46,//2

0x00,0x21,0x41,0x45,0x4B,0x31,//3

0x00,0x18,0x14,0x12,0x7F,0x10,//4

0x00,0x27,0x45,0x45,0x45,0x39,//5

0x00,0x3C,0x4A,0x49,0x49,0x30,//6

0x00,0x01,0x71,0x09,0x05,0x03,//7

0x00,0x36,0x49,0x49,0x49,0x36,//8

0x00,0x06,0x49,0x49,0x29,0x1E,//9

0x00,0x00,0x60,0x60,0x00,0x00,//.

0x00,0x00,0x36,0x36,0x00,0x00,//:

};

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

/*******************************************液晶初始化取模************************************/

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

codeucharmove_chinese_string[][24]={//阜阳师范学院A队,参赛队员:

张渝、李志明

/*--文字:

阜--*/

/*--宋体9;此字体下对应的点阵为:

宽x高=12x12--*/

/*--高度不是8的倍数,现调整为:

宽度x高度=12x16--*/

{0x00,0x00,0xFE,0xAA,0xAA,0xAB,0xAA,0xAA,0xEE,0x00,0x00,0x00,0x02,0x02,0x02,0x02,

0x02,0x07,0x02,0x02,0x02,0x02,0x02,0x00},

……};

codeucharwrite_chinese[][32]={//阜阳师范学院3队张渝李志明

/*--文字:

阜--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=16x16--*/

{0x00,0x00,0x00,0xFC,0x54,0x54,0x56,0x55,0x54,0x54,0x54,0xDC,0x00,0x00,0x00,0x00,

0x08,0x08,0x08,0x09,0x09,0x09,0x09,0xFF,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x00},

……};

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

/*******************************************时钟的取模************************************/

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

codeucharDate[][24]={//年、月、日

/*--文字:

年--*/

/*--宋体9;此字体下对应的点阵为:

宽x高=12x12--*/

/*--高度不是8的倍数,现调整为:

宽度x高度=12x16--*/

{0x88,0x84,0xF3,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x82,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00},

……};

codeucharinterface[][32]=/*1、时钟2、计算器3、电梯*/

{

/*--文字:

1--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=8x16--*/

{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x08,0x18,0x30,0x00,0x00,0x00,0x00},

};

codeucharclock[][32]={//设置闹钟

/*--文字:

设--*/

/*--宋体12;此字体下对应的点阵为:

宽x高=16x16--*/

{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},

…………};

codeucharClock_Bmp[][32]={/'!

'/

/*--调入了一幅图像:

这是您新建的图像--*/

/*--宽度x高度=16x16--*/

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};

codeucharBigDigit24[][12]={//数字0123456789

/*--文字:

0--*/

/*--宋体9;(小五)此字体下对应的点阵为:

宽x高=6x12--*/

/*--高度不是8的倍数,现调整为:

宽度x高度=6x16--*/

{0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00},

……};

codeucharBigDigit32[][16]={//数字0123456789

/*--文字:

0--*/

/*--宋体12;(小四)此字体下对应的点阵为:

宽x高=8x16--*/

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},

……};

codeucharweek[][24]={//星期一二三四五六日

/*--文字:

星--*/

/*--宋体9;此字体下对应的点阵为:

宽x高=12x12--*/

/*--高度不是8的倍数,现调整为:

宽度x高度=12x16--*/

{0x00,0x80,0x7F,0x55,0x55,0xF5,0x55,0x55,0x55,0x5F,0x00,0x00,0x05,0x04,0x05,0x05,

0x05,0x07,0x05,0x05,0x05,0x05,0x04,0x00},

……};

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

/*****************************电梯的字模*****************************************/

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

codeucharBmp[]=//电梯

{

/*--宽度x高度=8x8--*/

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

};

codeucharBmpUp[]=

{

/*--调入了一幅图像:

这是您新建的图像--*/

/*--宽度x高度=8x8--*/

0x00,0x04,0x06,0xFF,0x06,0x04,0x00,0x00

};

codeucharBmpDown[]=

{

/*--调入了一幅图像:

这是您新建的图像--*/

/*--宽度x高度=8x8--*/

0x00,0x20,0x60,0xFF,0x60,0x20,0x00,0x00

};

codeucharBmpF[]=

{

/*--调入了一幅图像:

这是您新建的图像--*/

/*--宽度x高度=8x8--*/

0x00,0x00,0xFF,0xFF,0x1B,0x1B,0x00,0x00

};

 

voidRTInputByte(uchard){/**********************实时时钟的初始化************/

uchari;ACC=d;

for(i=8;i>0;i--){

T_IO=ACC0;/*相当于汇编中的RRC*/

T_CLK=1;T_CLK=0;ACC=ACC>>1;

}}

ucharRTOutputByte(void){

uchari;

for(i=8;i>0;i--){

ACC=ACC>>1;/*相当于汇编中的RRC*/

ACC7=T_IO;T_CLK=1;T_CLK=0;

}return(ACC);

}

voidW1302(ucharucAddr,ucharucDa){

T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr);/*地址,命令*/

RTInputByte(ucDa);/*写1Byte数据*/T_CLK=1;T_RST=0;

}

ucharR1302(ucharucAddr){

ucharucData;

T_RST=0;T_CLK=0;T_RST=1;RTInputByte(ucAddr);/*地址,命令*/

ucData=RTOutputByte();/*读1Byte数据*/

T_CLK=1;T_RST=0;ucData=ucData%16+ucData/16*10;//十六进制转化为十进制

return(ucData);

}

/***************向DS1302写入一个字节***************/

voidWDS1302(ucharaddr,uchardate){

W1302(0x8e,0x00);//控制命令,WP=0,写操作

T_RST=0;T_CLK=0;T_RST=1;RTInputByte(addr);/*地址,命令*/

RTInputByte(date);/*写1Byte数据*/T_CLK=1;T_RST=0;W1302(0x8e,0x80);

}

voidInit1302(void){

W1302(0x8e,0x00);//控制写入WP=0W1302(0x90,0xa5);

W1302(0x80,0x50);//秒W1302(0x82,0x50);//分

W1302(0x84,0x19);//时W1302(0x86,0x01);//日

W1302(0x88,0x01);//月W1302(0x8a,0x06);//星期

W1302(0x8c,0x11);//年W1302(0x8e,0x80);

}/*************DS1302初始化结束*****************/

/*************延时函数************************/

voiddelay_1us(void){//1us延时函数

uinti;for(i=0;i<1000;i++);}

voiddelay_1ms(void){//1ms延时函数

uinti;for(i=0;i<1140;i++);}

voiddelay_nms(uintn){//Nms延时函数

uinti=0;for(i=0;i

voidLCD_write_byte(uchardat,ucharcommand){/********************液晶程序**************************/

uchari;LCD_CE=0;

if(command==0)LCD_DC=0;

elseLCD_DC=1;

for(i=0;i<8;i++){

if(dat&0x80)LCD_SDIN=1;

elseLCD_SDIN=0;LCD_SCLK=0;dat=dat<<1;LCD_SCLK=1;

}LCD_CE=1;

}

voidLCD_set_XY(ucharX,ucharY){/***************设置LCD坐标函数****************/

LCD_write_byte(0x40|Y,0);//columnLCD_write_byte(0x80|X,0);//row

}

voidLCD_clear(void){/***************LCD清屏函数******************/

uinti;LCD_write_byte(0x0c,0);LCD_write_byte(0x80,0);

for(i=0;i<504;i++)LCD_write_byte(0,1);

}

voidClearhang(ucharx,uchary,ucharlength){/*****************指定位置删除***********************/

uinti;LCD_set_XY(x,y);

for(i=0;i

}

voidLCD_write_char(ucharc){/**************显示英文字符*******************/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1