性能服务器闹钟功能,发一个目前功能和性能最全的时钟!

多种界面可储存切换,AD转换,

红外遥控,农历节气,整点报时或音乐

农历节气和生日,图形温度,和绘

图程序时钟,温度控制和闹钟,

农历查询和背光自动和手动控制集一体的

大程序......................................................

void Baiguang(void){

uint temper;

uchar temper_ge,temper_shi,temper_bai,temper_qai;

temper=DSS()*(10.625);//读取温度

temper_ge=temper%10+0x30;

temper_shi=temper%100/10+0x30;

temper_bai=temper/100+0x30;

temper_qai=temper/1000;

set16162pic(1,2,0,3); //在第1列第2行不反白的显示温度标记标志T和一个小三角

_nop_();

set16162pic(5,2,0,9); //在第5列第2行不反白的显示温度标记标志

_nop_();

//set16162pic(5,3,1,9); //在第5列第3行反白的显示温度标记标志

_nop_();

set16162pic(1,3,1,3); //在第1列第3行反白的显示温度标记标志T和一个小三角

_nop_();

write_12864_cmd(0x30);

if(t/2%2==0) {

dispString(0, 0, 1, "白光烙铁温度控制"); }

else {

dispString(0, 0, 1, "¤加热进程 %..");

write_12864_cmd(0x85);

++th5;

if(th5>100||th5<0)th5=0;

lcm_w_test(1,th5/100+0x30);//

lcm_w_test(1,th5%100/10+0x30);//

lcm_w_test(1,th5%10+0x30);

}

dispString(2, 4, 1, "Tm");

/*--------第二行设定温度的显示————————*/

write_12864_cmd(0x91);

lcm_w_word(" ");

lcm_w_test(1,th/100+0x30);//

lcm_w_test(1,th%100/10+0x30);//

lcm_w_test(1,th%10+0x30);//

lcm_w_word("℃");

/*--------第三行左边烙铁温度的显示————————*/

write_12864_cmd(0x89);

lcm_w_word(" ");

lcm_w_test(1,th1+0x30);//

lcm_w_test(1,th2+0x30);//

lcm_w_test(1,th3+0x30);//

lcm_w_word("℃");

/*--------第三行右边时分的显示————————*/

read_clockS();

write_12864_cmd(0x98);

lcm_w_test(1,mo/16+0x30);

lcm_w_test(1,mo%16+0x30);

lcm_w_word("月");

lcm_w_test(1,days/16+0x30);

lcm_w_test(1,days%16+0x30);

lcm_w_word("日");

lcm_w_test(1,hh/16+0x30);

lcm_w_test(1,hh%16+0x30);

m = read_clock(0x81)&0x01;//冒号":"以秒闪烁

if(m == 1){//秒点闪烁

lcm_w_word(":");

}else{lcm_w_word(" ");}

lcm_w_test(1,mm/16+0x30);

lcm_w_test(1,mm%16+0x30);

if(m == 1){//秒点闪烁

lcm_w_word(":");

}else{lcm_w_word(" ");}

lcm_w_test(1,ss/16+0x30);

lcm_w_test(1,ss%16+0x30);

//*********小于于0C时的温度处理******************

if(DSS < 0)

{write_12864_cmd(0x9c);

lcm_w_word(" -");

}

else

//*********大于100C时的温度处理******************

{ if(temper_qai==0x01) {

temper_bai=temper%1000/100+0x30; //取除以1000的余数再除100

temper_shi=temper%1000%100/10+0x30;

temper_ge=temper%1000%100%10+0x30;

write_12864_cmd(0x95);

write_data(0x31);

write_data(temper_bai);

write_data(temper_shi);

write_data('.');

write_data(temper_ge);

write_data(0x43);

write_12864_cmd(0x36);}

}

//*********小于于100C时的温度处理******************

if(temper_qai==0x00) {

write_12864_cmd(0x95);

write_data(temper_bai);

write_data(temper_shi);

write_data('.');

write_data(temper_ge);

lcm_w_word("℃");

write_12864_cmd(0x36);}

}

/*---------12864LCD---------------*/

/*

第一行0X80-0X81-0X82-0X83-0X84-0X85-0X86-0X87

第三行0X88-0X89-0X8A-0X8B-0X8C-0X8D-0X8E-0X8F

第二行0X90-0X91-0X92-0X93-0X94-0X95-0X96-0X97

第四行0X98-0X99-0X9A-0X9B-0X9C-0X9D-0X9E-0X9F

-------1----2----3----4----5----6----7----8--

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

函数名:校时处理程序

调 用:CK();

参 数:无

返回值:无

结 果:在00时00分30秒时进行时间校准,加/减一定时间作为补偿。

备 注:校时程序用RAM,0xFA用于存放加或减(1/0),0XFC用于存放加减的秒数(0~20秒)

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

void CK (void){ // write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302

unsigned char cktemp;

cktemp=read_clock(0xfd);

/***********让减秒操作过了时间段才恢复标记,才能始校时不重复操作*****************************/

if((read_clock(0x85)==0)&&(read_clock(0x83)==0x01)&&(read_clock(0x81)==0)){//凌晨0点1分0秒时恢复

CKTIME_1=0; //为下一天校时恢复标记

}

if((read_clock(0x85)==0)&&(read_clock(0x83)==0)&&(read_clock(0x81)==0x30)&&CKTIME_1==0){//凌晨3点0分30秒时校正

if( read_clock(0xFB) == 1){ //减调整

write_clock(0x8e,0x00);//允许写操作

write_clock(0x80,0x30+cktemp);//对秒进行调整。26-temp:让本来+2.+1.+0.-25.-24...变成+2.+1.+0.-1.-2...

write_clock(0x8e,0x80);//禁止写操作

Beep_key();//按键音

CKTIME_1=1;

}

if( read_clock(0xFB) == 0){ //减调整

write_clock(0x8e,0x00);//允许写操作

write_clock(0x80,0x30-cktemp);//对秒进行调整

write_clock(0x8e,0x80);//禁止写操作

CKTIME_1=1;

}

}

}

/*------------------------外部中断0程序-------------------------*/

/*--------- interrupt 0外部中断0

interrupt 1定时器0

interrupt 2外部中断1

interrupt 3定时器1

interrupt 4串口中断 */

void LCDLOGO(void) {

unsigned char InitLine;

Beep(); //扬声器--开机音

lcm_init(); //初始化液晶显示器

CH_L(); //渐暗+清屏

dispString(0, 0, 100, "欢迎使用智能时钟");

dispString(1, 0, 100, " STC12C5A60S2 ");

dispString(2, 1, 100, "请稍等片刻");

dispString(3, 0, 100, "系统启动中......");

CH_H(); //渐亮

for (InitLine = 0; InitLine < 17; InitLine++)

{convertChar(3, 0, InitLine);DELAY_MS(3);} //显示等留3秒

Beep(); //扬声器--开机音

CH_L(); //渐暗+清屏

dispString(0, 0, 100, "●PMW 调光+ 闹钟");

dispString(1, 0, 100, "农历+ 节日+ 生日");

dispString(2, 0, 100, "△整点报时+ 音乐");

dispString(3, 0, 100, "△多种界面切换..");

CH_H(); //渐亮

for (InitLine = 0; InitLine < 17; InitLine++)

{convertChar(0, 0, InitLine);DELAY_MS(230);} //显示等留3秒

/*---------------------------------*/

for (InitLine = 0; InitLine < 17; InitLine++)

{convertChar(1, 0, InitLine);DELAY_MS(230); }//显示等留3秒

/*----------------------------------*/

for (InitLine = 0; InitLine < 17; InitLine++)

{convertChar(2, 0, InitLine);DELAY_MS(230);} //显示等留3秒

/*-----------------------------------*/

for (InitLine = 0; InitLine < 17; InitLine++)

{convertChar(3, 0, InitLine);DELAY_MS(230);} //显示等留3秒

Beep(); //扬声器--开机音

CH_L(); //渐暗+清屏

/*---------1-----------------------------------------*/

dispString(0, 0, 1, "┏━━━━━━┓");

dispString(1, 0, 1, "┃文杰工作室--┃");

dispString(2, 0, 1, "┃ WELL**COME ┃");

dispString(3, 0, 1, "┗━━━━━━┛");

CH_H(); //渐亮

DELAY_MS(300); //显示等留3秒

Beep(); //扬声器--开机音

lcm_clr();//清屏

Disp_Img(TU_TAB1); //显示一幅图片(我的电脑)

CH_H(); //渐亮

DELAY_MS(300); //显示等留3秒

InitialSound(); //唱歌文件初始化

Beep_al(); //扬声器--闹钟

Play(Music_lz,0,3,360);

CH_H(); //渐亮

Beep(); //扬声器--开机音

lcm_clr(); //清屏

Disp_Img(BMP11); //显示一幅图片(龙的图案) buffer

CH_H(); //渐亮

DELAY_MS(300); //显示等留3秒

Beep(); //扬声器--开机音

lcm_clr();//清屏

Disp_Img(tab5); //显示一幅图片(公鸡图案) buffer

CH_H(); //渐亮

DELAY_MS(300); //显示等留3秒

Beep(); //扬声器--开机音

lcm_clr();//清屏

Disp_Img(Photo2); //显示一幅图片(我的QQ图案) buffer

CH_H(); //渐亮

DELAY_MS(500); //显示等留3秒

lcm_clr();//清屏

lcm_w_word("出品于文杰工作室 欢迎使用 FutureTimer4 LiWenJie&&Home ");//

//------|-------1-------|-------------|-----2--------|-------4-------|----//尺

CH_H(); //渐亮

DELAY_MS(200); //显示等留3秒

Beep_set();//扬声器--确定设置

Play(Music_wo,0,3,360);

/*--------------3---------------------------------*/

lcm_clr();//清屏

displayPhoto(powerOnPhoto, 0);

DELAY_MS(300); //显示等留3秒

lcm_clr();//清屏

lcm_w_word(" 精确时钟 分享每一分钟 V8.003 * 按住任意键校时");//

//------|-------1-------|-------3-------|-------2---|-------4-------|-----//标尺

CH_H(); //渐亮

DELAY_MS(200); //显示等留3秒

Beep_key(); //扬声器--按键音

/*-----------------------------------------------*/

// Timer_init(); //中断初始化一下

}

/*显示模式3的界面*/

/*********特大号时钟界面*************************************************/

void dis_mode3int(void)

{

uchar i,j,h,l,x_0=0x80,y_0=0x90;

hh=read_clock(0x85);

h=hh>>4; // 分离十位 个位

l=hh&0x0f;

for(j=0;j<2;j++)

{ for(i=0;i<32;i++) // 十位个位一起读入

{ wr_lcd(0,0x34);

wr_lcd(0,y_0++);

wr_lcd(0,x_0);

wr_lcd(0,0x30);

wr_lcd(1,mode_3num[h][i*3]); // 连续写数据,X坐标自动加1

wr_lcd(1,mode_3num[h][i*3+1]);

wr_lcd(1,mode_3num[h][i*3+2]);

wr_lcd(1,mode_3num[l][i*3]);

wr_lcd(1,mode_3num[l][i*3+1]);

wr_lcd(1,mode_3num[l][i*3+2]);

if(y_0==0xa0){x_0=x_0+8;y_0=0x80;}

}

x_0=0x84,y_0=0x90;

mm=read_clock(0x83);

h=mm>>4; // 分离十位 个位

l=mm&0x0f;}

}

// 模式3向LCM中填写 秒 数据

void disSecond2(void)

{ char second[3];

read_clockS();

write_12864_cmd(0x30);

second[0]=ss/16+0x30;

second[1]=ss%16+0x30;

second[2]='\0';

dispS2tring(2,7,second);

if(read_clock(0xc7) == 1){

set16162pic(8,2,0,0);} //在第8列第2行不反白的显示喇叭标记

else if(read_clock(0xc7) == 0) //没闹钟时在标记处写入空白

dispString(1, 1, 1, " ");

write_12864_cmd(0x36);

if(t/1%2==0)

{display(3,11);}

else

{display(3,10);}

}

/*显示模式3的界面*/

void dis_mode3(void)

{ write_12864_cmd(0x30);

Tempuer_sfm(); //温度显示和图片时钟共用

set16162pic(4,4,0,3);} //在第4列第4行不反白的显示温度标记

/****在界面6LCD12864的第三行写入农历信息**************************************************/

void displcd128D()

{ dispS2tring(3,2,"农历");

lcmnongli();}

void disDate()

{ char dateBuff[9];

read_clockS();

xinq =read_clock(0x8b);

dateBuff[0]=yy/16+0x30;

dateBuff[1]=yy%16+0x30;

dateBuff[2]=0x2f;

dateBuff[3]=mo/16+0x30;

dateBuff[4]=mo%16+0x30;

dateBuff[5]=0x2f;

dateBuff[6]=days/16+0x30;

dateBuff[7]=days%16+0x30;

dateBuff[8]='\0';

dispS2tring(0,2,dateBuff);//写入月日信息

Conver_week(0,yy,mo,days);//调用公历换算星期子函数

//seweek=week;//week是公历转换星期子函数的运行结果,结果为0-6,0是星期日

switch(week) //第一行6--7列写入周几即星期X

{

case 1:dispS2tring(0,6,"周一");break;

case 2:dispS2tring(0,6,"周二");break;

case 3:dispS2tring(0,6,"周三");break;

case 4:dispS2tring(0,6,"周四");break;

case 5:dispS2tring(0,6,"周五");break;

case 6:dispS2tring(0,6,"周六");break;

case 7:dispS2tring(0,6,"周日");break;

}}

// 向LCM中填写 秒 数据

void disSecond(void)

{ char second[3];

second[0]=ss/16+0x30;

second[1]=ss%16+0x30;

second[2]='\0';

dispS2tring(2,7,second);

displcd128D(); //更新农历

disDate(); //更新日期

if(read_clock(0xc7) == 1){

set16162pic(8,2,0,0);}//在第8列第2行不反白的显示喇叭标记

else if(read_clock(0xc7) == 0) //没闹钟时在标记处写入空白

dispString(1, 1, 1, " ");

write_12864_cmd(0x36);

if(t/1%2==0)

{display(4,11);}

else

{display(4,10);}

}

//向LCM中填写 时&分 数据

void disHaMint(void)

{ mm = read_clock(0x83);//读取分,只要有改变液晶显示也改变

if(min_temp!=mm)

{min_temp=mm;

Dispdeal(mm); //处理一下分的个位和十位

display(5,shi);

display(6,ge);}

hh = read_clock(0x85);//读取小时,只要有改变液晶显示也改变

if(hour_temp!=hh)

{hour_temp=hh;

Dispdeal(hh); //处理一下时的个位和十位

display(2,shi);

display(3,ge);

}

}

void disTemint(void)

{

uchar j;

uchar dat1,dat2,dat3,dat4;

//温度柱状显示和横线刻度显示

for(j=0;j<32;j++)

{ dat1=wendu1[j*2];

dat2=wendu1[j*2+1];

if(temperature+j==62) dat1|=0x07;

if(temperature+j >62) dat1|=0x02;

dispLine(0,j,dat1,dat2);

}

for(j=0;j<32;j++)

{ dat1=wendu1[j*2+64];

dat2=wendu1[j*2+65];

if(temperature+j==30) dat1|=0x07;

if(temperature+j >30) dat1|=0x02;

dispLine(8,j,dat1,dat2);}

//数字刻度显示和温度个位显示

if(temperature>=20) //温度为零上

{

for(j=0;j<32;j++)

{

dat3=wendu2[j*2];

dat4=wendu2[j*2+1];

switch(temperature+j)

{

case 60: dat4|=wendu3[temperature%10][0];break;

case 61: dat4|=wendu3[temperature%10][1];break;

case 62: dat4|=wendu3[temperature%10][2];break;

case 63: dat4|=wendu3[temperature%10][3];break;

case 64: dat4|=wendu3[temperature%10][4];break;

}

dispLine(1,j,dat3,dat4);

}

for(j=0;j<32;j++)

{

dat3=wendu2[j*2+64];

dat4=wendu2[j*2+65];

switch(temperature+j)

{

case 30: dat4|=wendu3[temperature%10][0];break;

case 31: dat4|=wendu3[temperature%10][1];break;

case 32: dat4|=wendu3[temperature%10][2];break;

case 33: dat4|=wendu3[temperature%10][3];break;

case 34: dat4|=wendu3[temperature%10][4];break;

}

dispLine(9,j,dat3,dat4);

}

}

else //温度为零下

{

temperature=0x14-temperature;

for(j=0;j<32;j++)

{

dat3=wendu2[j*2];

dat4=wendu2[j*2+1];

dispLine(1,j,dat3,dat4);

}

for(j=0;j<32;j++)

{

dat3=wendu2[j*2+64];

dat4=wendu2[j*2+65];

switch(j-temperature)

{

case 8: dat4|=wendu3[temperature%10][0];break;

case 9: dat4|=wendu3[temperature%10][1];break;

case 10: dat4|=wendu3[temperature%10][2];break;

case 11: dat4|=wendu3[temperature%10][3];break;

case 12: dat4|=wendu3[temperature%10][4];break;

}

dispLine(9,j,dat3,dat4);

}}}

void disTem(void)

{if(temperature == (DSS()*10.625)/10+0x14) return ;

temperature=(( DSS()*10.625)/10+0x14); //实际温度加20°

//温度柱状显示和横线刻度显示

disTemint();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值