您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 多功能电子钟的C语言程序
兰州交通大学博文学院毕业设计(论文)1程序A.1主程序//主程序的功能是对子程序进行调用,并设定显示延时时间#includereg51.h//头文件;#includetypedef.h#includelcd.h#includekey.h#includealarm_clock.h#includeds1302.hsbitDAT=P1^0;//74LS164的A、B脚接单片机P1.0;sbitCLK=P1^1;//74LS164的CLOCK脚接单片机P1.1;sbitCalendar=P2^7;//定义日历显示按键K7接单片机P2.7;sbitWDZ=P2^6;//定义温度显示按键K6接单片机P2.6;sbitFUN=P2^5;//定义功能选择键K5接单片机P2.5;sbitUP=P2^4;//定义加1键K4接单片机P2.4;sbitDOWN=P2^3;//定义减1键K3接单片机P2.3;sbitEnte_Snooze=P2^2;//定义确认/贪睡键K2接单片机P2.2;sbitAlarm=P2^1;//定义闹铃开关键K1接单片机P2.1;sbitbeeper=P2^0;//定义闹铃接口P2.0;#defineuintunsignedint#defineucharunsignedchar#definetrue1//定义true=1;#definefalse0//定义false=0;#defineFUNCTION0xDF//定义FUN键值为DFH;#defineUP0xEF//定义UP键值为EFH;#defineDOWN0xF7//定义DOWN键值为F7H;#defineALARM0xFB//定义ALARM键值为FBH;#defineEnte_Snooze0xFB//定义E/S键值为BFH;voidkey_task(void);voidprocess(ucharcurrent_key);externbitflash_flag;//定义全局变量(标志位);externucharfunction_count;兰州交通大学博文学院毕业设计(论文)2externbitalarm_flag;externbitkey_enable;voiddis();voidsendbyte();voidreset_3w();voidwbyte_3w(uchar);ucharrbyte_3w();voidwrite_byte(ucharClock_Add,ucharClock_Data);ucharread_byte(uchar);voidwrite_clock_burst();voidds1302_init();voidds1302_task();voidlcd_disp_time1();voiddis_WD();voidds18b20();voidalarm_clock(void);voiddelay(unsignedinttime)//10ms延时{unsignedchara,b,c;for(a=0;atime;a++)for(b=0;b10;b++)for(c=0;c120;c++);}voidmain()//主程序;{ds1302_init();//初始化DS1302;beeper=1;//初始化闹铃管脚;while(1)//循环;{key_task();//扫描键盘子程序;ds1302_task();//DS1302子程序;ds18b20();//DS18B20子程序;alarm_clock();//闹铃子程序;disp_time();//时间显示子程序;兰州交通大学博文学院毕业设计(论文)3delay(55);//延时;beeper=1;//闹铃管脚置1;}}程序A.2电子时钟程序//主要是对时钟芯片DS1302初始化#includereg51.h#includetypedef.h#includelcd.h#includeds1302.h#includekey.hvoidreset_3w();voidwbyte_3w(uchar);ucharrbyte_3w();voidwrite_byte(ucharClock_Add,ucharClock_Data);ucharread_byte(uchar);voidwrite_clock_burst();voidds1302_init();voidds1302_task();#defineuintunsignedint#defineucharunsignedchar/*-------------定义初始化时间----------*/ucharsec=00;ucharmin=25;ucharhour=14;uchardate=12;ucharmonth=5;ucharyear=8;ucharday_of_week;ucharclk_hour=14;ucharclk_min=28;//-14:28-/*-----------------定义寄存器地址----------------------*/兰州交通大学博文学院毕业设计(论文)4#defineREAD_SEC_ADD0x81//读秒寄存器#defineREAD_MIN_ADD0x83//读分寄存器#defineREAD_HOUR_ADD0x85//读时寄存器#defineREAD_DATE_ADD0x87//读日寄存器#defineREAD_MONTH_ADD0x89//读月寄存器#defineREAD_DOW_ADD0x8B//读周寄存器#defineREAD_YEAR_ADD0x8D//年寄存器#defineWRITE_SEC_ADD0x80//写秒寄存器#defineWRITE_MIN_ADD0x82//写分寄存器#defineWRITE_HOUR_ADD0x84//写时寄存器#defineWRITE_DATE_ADD0x86//写日寄存器#defineWRITE_MONTH_ADD0x88//写月寄存器#defineWRITE_DOW_ADD0x8A//写周寄存器#defineWRITE_YEAR_ADD0x8C//写年寄存器#defineCLOCK_BURST_ADD0xBE//时钟多字节传送模式externvoidwrite_clock_burst();externvoidwrite_byte(ucharClock_Add,ucharClock_Data);voidsendbyte();voidreset_3w();Voidwbyte_3w(uchar);ucharrbyte_3w();voidwrite_byte(ucharClock_Add,ucharClock_Data);ucharread_byte(uchar);voidwrite_clock_burst();voidds1302_init();voidds1302_task();sbitSCLK=P3^5;//定义管脚SCLKsbitIO=P3^6;//定义管脚I/O兰州交通大学博文学院毕业设计(论文)5sbitRST=P3^7;//定义管脚RSTucharsec,min,hour,date,month,year;ucharcodehex2bcd[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,/*00-09*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,/*10-19*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,/*20-29*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,/*30-39*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,/*40-49*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,/*50-59*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,/*60-69*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,/*70-79*/0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,/*80-89*/0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,/*90-99*/};ucharcodebcd2hex[]={0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,/*00-09*/10,11,12,13,14,15,16,17,18,19,0,0,0,0,0,0,/*10-19*/20,21,22,23,24,25,26,27,28,29,0,0,0,0,0,0,/*20-29*/30,31,32,33,34,35,36,37,38,39,0,0,0,0,0,0,/*30-39*/40,41,42,43,44,45,46,47,48,49,0,0,0,0,0,0,/*40-49*/50,51,52,53,54,55,56,57,58,59,0,0,0,0,0,0,/*50-59*/兰州交通大学博文学院毕业设计(论文)660,61,62,63,64,65,66,67,68,69,0,0,0,0,0,0,/*60-69*/70,71,72,73,74,75,76,77,78,79,0,0,0,0,0,0,/*70-79*/80,81,82,83,84,85,86,87,88,89,0,0,0,0,0,0,/*80-89*/90,91,92,93,94,95,96,97,98,99,0,0,0,0,0,0,/*90-99*/};voidreset_3w()//复位子程序{SCLK=0;RST=0;//复位DS1302,中止数据传送RST=1;//启动数据传送}voidwbyte_3w(ucharW_Byte)//写字节子程序{uchari;for(i=0;i8;++i){IO=0;if(W_Byte&0x01){IO=1;}SCLK=0;SCLK=1;W_Byte=1;}}ucharrbyte_3w()//读字节子程序{uchari;ucharR_Byte;ucharTmpByte;R_Byte=0x00;IO=1;for(i=0;i8;i++){SCLK=1;SCLK=0;TmpByte=(uchar)IO;TmpByte=7;兰州交通大学博文学院毕业设计(论文)7R_Byte=1;R_Byte|=TmpByte;}returnR_Byte;}voidwrite_byte(ucharClock_Add,ucharClock_Data){reset_3w();wbyte_3w(Clock_Add);wbyte_3w(Clock_Data);reset_3w();}voidwrite_clock_burst(){reset_3w();//复位wbyte_3w(CLOCK_BURST_ADD);//写多字节传送模式寄存器wbyte_3w(hex2bcd[sec]);//写入初始化时间wbyte_3w(hex2bcd[min]);wbyte_3w(hex2bcd[hour]);wbyte_3w(hex2bcd[date]);wbyte_3w(hex2bcd[month]);wbyte_3w(hex2bcd[day_of_week]);wbyte_3w(hex2bcd[year]);wbyte_3w(0);/*mustwritecontrolregisterinburstmode*/reset_3w();}ucharread_byte(ucharClock_Add)//从DS1302读一个字节{uchar
本文标题:多功能电子钟的C语言程序
链接地址:https://www.777doc.com/doc-5897912 .html