光控温度时钟

2019-09-01 09:48

1.主函数:

/*按下K1修改时间(闹钟,分,时,日,月,返回,K2数据加一);按住K2显示日,月或关响铃; */

#include\#include\

#define uchar unsigned char sbit D1=P2^0; sbit D2=P2^1; sbit D3=P2^2; sbit D4=P2^3; sbit K1=P2^4; sbit K2=P2^5;

sbit beep=P2^6; ucharnum=0;

uchar code_time1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar time1[2]={1,0}; uchar *time_data ; uchar key,key1,key2=0; uchar time[7]; ucharad_m=0; //ad通道 uchar data1,data2; // uintad_data; //ad数据 bitcout=1; void delay() { uchari=50; while(i--); }

main() { void flicker(); while(1){ GetTime(time ); //读取当前日期时间 if (time[0]-key1>3) { //3秒调节一次亮度 key1=time[0]; ad_m= 0x10; readAD(ad_m); ad_data= readAD(ad_m); ad_data=ad_data/7+100; P3= (char)ad_data; }

if(key!=time[1]) { cout=0; //开闹钟 key=time[1]; data1=time[0];

//一分钟显示温度3秒

break;

ad_m=0; readAD(ad_m); //第一次不要

ad_data= readAD(ad_m); ad_data/=20; while(1) { GetTime(time ); if(time[0]-data1>2)break; switch(num) {

case 0:D4=1,D3=0,D2=1,D1=1; P0=0x46;break;

case 1: D4=1,D3=1,D2=0,D1=1; P0=code_time1[(char)ad_data]; break; case 2:D4=1,D3=1,D2=1,D1=0; P0=code_time1[(char)ad_data/10]; default: num=0xff; break; } num++; }

}

if(K2==0)

//月份显示 { delay();if(K2==0){beep=0;cout=1;/*关闹钟*/ while(K2==0){ switch(num) { case 0: D4=0,D3=1,D2=1,D1=1; P0=code_time1[time[3]]; break; case 1: D4=1,D3=0,D2=1,D1=1; P0=code_time1[time[3]/10]; case 2: D4=1,D3=1,D2=0,D1=1; P0=code_time1[time[4]]; case 3: D4=1,D3=1,D2=1,D1=0; P0=code_time1[time[4]/10]; default : num=0xff; }num++; delay(); } } } if(K1==0) //时间修改 { delay(); if(K1==0)

break;

break; break;

{while(K1==0); if(key2<2)key2++; else key2=1;while(1){ if(key2>2){if(key2%2)time_data=time+key2-2;}else time_data=time1; //按键编号 if(key2>4)if(time_data[1]%2)data2=31;else data2=30;else

if(key2%2)data2=59;else data2=23; //数据上限处理 if(key2==6)data2=12;if(key2==5&&time_data[1]==2)data2=29; //特殊处理 flicker(); if(K2==0){ delay();if(K2==0) { switch(key2%2) { case 1:if(time_data[0]2)SET_DS1302(time_data,key2-2);break; //写入1302 case 0: if(time_data[1]2)SET_DS1302(time_data+1,key2-2);break; default: break; } } while(K2==0)flicker(); } if(K1==0){ delay();if(K1==0)key2++;} while(K1==0); if(key2>6)break; } } } if(cout==0) if(time1[0]==time[1]&&time1[1]==time[2]){beep=1;} else beep=0; //响铃 switch(num) { case 0: case 1: 秒间隔闪烁 case 2:

D4=0,D3=1,D2=1,D1=1; P0=code_time1[time[1]]; break;

D4=1,D3=0,D2=1,D1=1;

if(time[0]%2){P0=code_time1[time[1]/10]-0x80; } else P0=code_time1[time[1]/10]; break; D4=1,D3=1,D2=0,D1=1; if(time[0]%2){P0=code_time1[time[2]]-0x80; } else P0=code_time1[time[2]]; break;

//一

case 3: D4=1,D3=1,D2=1,D1=0; P0=code_time1[time[2]/10]; break; default : num=0xff; }num++; } } void flicker(){ switch(num){ //需修改数据的显示 case 0:

if(key2%2==1){data1++;if(data1>100){D4=0,D3=1,D2=1,D1=1;P0=code_time1[time_data[0]];}} else {D4=0,D3=1,D2=1,D1=1;P0=code_time1[time_data[0]];} break; case1:if(key2%2==1){if(data1>100){D4=1,D3=0,D2=1,D1=1;P0=code_time1[time_data[0]/10];}} else {D4=1,D3=0,D2=1,D1=1;P0=code_time1[time_data[0]/10];} break; case2: if(key2%2==0){data1++;if(data1>100){D4=1,D3=1,D2=0,D1=1;P0=code_time1[time_data[1]];}} else {D4=1,D3=1,D2=0,D1=1;P0=code_time1[time_data[1]];} break; case3: if(key2%2==0){if(data1>100){D4=1,D3=1,D2=1,D1=0;P0=code_time1[time_data[1]/10];}}

else {D4=1,D3=1,D2=1,D1=0;P0=code_time1[time_data[1]/10];break; default: num=0xff; } num++ ; delay(); }

#include \

uintreadAD(uchar port) { ucharch,i,j; uint ad; ch=port; for(j=0;j<3;j++) //循环三次,确保转换数据准确 { ad=0; ch=port; EOC=1; CS=1; CS=0; CLK=0; for(i=0;i<10;i++) //TLC2543可改为12 { if(ADout) ad|=0x01; ADin=(bit)(ch&0x80); CLK=1;


光控温度时钟.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:六上复习资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: