ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:16.88KB ,
资源ID:29028145      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29028145.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(万年历c程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

万年历c程序.docx

1、万年历c程序#include reg52.h#include absacc.h#define LED P0#define DIG P2#define key_io P1void display();void key_scan(void);void key_scan_proc(void);void display_one();unsigned char k = 0;unsigned char key_flag;unsigned char key_return;unsigned char t = 0;unsigned char disp_flag;unsigned char disp_num;un

2、signed char bell_flag;unsigned char set6;unsigned char set_time6;unsigned char disp7;sbit CLK = P34; /*实时时钟时钟线引脚 */sbit IO = P35; /*实时时钟数据线引脚 */sbit RST = P36; /*实时时钟复位线引脚 */sbit dq = P14; /*ds18b20*/sbit ACC0 = ACC0;sbit ACC7 = ACC7;/sbit key1 = P10;/sbit key2 = P11;/sbit key3 = P12;/sbit key4 = P1

3、3;sbit light = P30;sbit bell = P37;/* 延时子函数*/void delay(unsigned char dly) while(dly-); /* 向DS1302写入1Byte数据*/void InputByte(unsigned char ucDa) unsigned char i; ACC = ucDa; for(i=8; i0; i-) IO = ACC0; CLK = 1; CLK = 0; ACC = 1; /* 从DS1302读取1Byte数据*/unsigned char OutputByte(void) unsigned char i; for

4、(i=8; i0; i-) ACC = 1; ACC7 = IO; CLK = 1; CLK = 0; return(ACC); /* 向DS1302指定地址写数据*/void W_1302(unsigned char Addr, unsigned char Da) RST = 0; CLK = 0; RST = 1; InputByte(Addr); /写地址 InputByte(Da); /写1Byte数据 CLK = 1; RST =0; /* 读取DS1302某地址的数据*/unsigned char R_1302(unsigned char Addr) unsigned char D

5、a; CLK = 0; RST = 0; RST = 1; InputByte(Addr); / 地址,命令 Da = OutputByte(); /读1Byte数据 RST =0; CLK = 1; return(Da); /* 初始化ds18b20*/void rst_18b20(void) dq=1; delay(8); dq=0; delay(80); dq=1; delay(35); /* 读ds18b20一个byte数据*/unsigned char read_18b20(void) unsigned char i,dat=0; for(i=0;i=1; dq=1; if(dq=1

6、) dat|=0x80; delay(4); return(dat); /* 向ds18b20写入一个byte 数据*/void write_18b20(unsigned char dat) unsigned char i; for(i=0;i=1; /* 读取温度值 ds18b20*/unsigned int read_T(void) unsigned int t=0; /16 bit unsigned char t0=0,t1=0; float temp=0; /32 bit rst_18b20(); write_18b20(0xcc); write_18b20(0x44); rst_18

7、b20(); write_18b20(0xcc); write_18b20(0xbe); t0=read_18b20(); t1=read_18b20(); t=t1; t=4; /*t = (t01); temp=t*0.0625; t=temp*10+0.5;*/ return(t); void main(void) W_1302(0x8e,0x00);/开保护 W_1302(0x8c,0x09);/year W_1302(0x8a,0x05);/week W_1302(0x88,0x05);/mouth W_1302(0x86,0x29);/date W_1302(0x84,0x15);

8、/hour W_1302(0x82,0x59);/minute W_1302(0x80,0x00);/second W_1302(0x8e,0x80);/写保护 TMOD = 0x01; TH0 = 0xFa; TL0 = 0xFF; EA = 1; ET0 = 1; TR0 = 1; bell = 1; disp_flag = 0; disp_num = 0; key_flag = 0; bell_flag = 0; while(1) while(disp_flag=0) display(); if(light=0) DIG = 0X00; disp_flag = 2; while(disp

9、_flag=1) display_one(); if(light=1) disp_flag = 0; /* 扫描显示函数*/void display(void) switch(k) case 0:LED = (disp0&0XF0)+(disp44); DIG = 0X80; break; case 1:LED = (disp04); DIG = 0X20; break; case 3:LED = (disp14); DIG = 0X08; break; case 5:LED = (disp24)+(disp6&0X0F); DIG = 0X04;delay(15); break; case

10、6:LED = 0xf0+t/10; DIG = 0X02; break; case 7:LED = (disp34)+t%10; DIG = 0X01;/while(1); break; case 8:DIG = 0X00; if(key_flag=0) t = read_T(); disp0=R_1302(0x8d); /year disp1=R_1302(0x89); /month disp2=R_1302(0x87); /data disp3=R_1302(0x8b); /week disp4=R_1302(0x85); /hour disp5=R_1302(0x83); /minte

11、 disp6=R_1302(0x81); /second if(disp4=set_time0)&(disp5=set_time1) bell = 0; else bell = 1; key_scan(); break; void display_one()key_scan(); switch(disp_num) case 1: DIG = 0x00; LED = (disp0&0XF0)+0x0f; DIG = 0X80;delay(100);DIG = 0x00; LED = (disp04)+0x0F; DIG = 0X40;delay(100); break; case 2: DIG

12、= 0x00; LED = (disp1&0X10)+0x0f; DIG = 0X20;delay(100);DIG = 0x00; LED = (disp14)+0x0F; DIG = 0X10;delay(100); break; case 3: DIG = 0x00; LED = (disp2&0Xf0)+0x0f; DIG = 0X08;delay(100);DIG = 0x00; LED = (disp24)+0x0F; DIG = 0X04;delay(100); break; case 4: DIG = 0x00; LED = 0xff; DIG = 0X00;delay(100

13、);DIG = 0x00; LED = (disp34)+0xF0; DIG = 0X80;delay(100);DIG = 0x00; LED = (disp4&0x0F)+0xF0; DIG = 0X40;delay(100); break; case 6: DIG = 0x00; LED = (disp54)+0xF0; DIG = 0X20;delay(100);DIG = 0x00; LED = (disp5&0x0F)+0xF0; DIG = 0X10;delay(100); break; /* 按键识别程序*/void key_scan(void) unsigned char k

14、ey_data = 0; key_io = 0xff; key_data = key_io&0x0f; if(key_data = 0xff) key_flag = 0; else delay(30); key_io = 0xff; if(key_io&0x0f) != 0x0f)&(key_io&0x0f) = key_data) while(key_io != 0xff); switch (key_data) case 0x0e : key_return = 0;key_flag = 1;break; case 0x0d : key_return = 1;key_flag = 1;brea

15、k; case 0x0b : key_return = 2;key_flag = 1;break; case 0x07 : key_return = 3;key_flag = 1;break; default : break; if(key_flag=1) disp_flag = 1; key_flag = 0; key_scan_proc(); /* 按键函数*/void key_scan_proc(void) int set; switch (key_return) case 0: disp_num+=1; if(disp_num=7) W_1302(0x8e,0x00);/开保护 W_1

16、302(0x8c,disp0);/year W_1302(0x8a,disp3);/week W_1302(0x88,disp1);/mouth W_1302(0x86,disp2);/date W_1302(0x84,disp4);/hour W_1302(0x82,disp5);/minute W_1302(0x80,0x00);/second W_1302(0x8e,0x80);/写保护 disp_flag = 0; disp_num = 0; break; case 1: set = (dispdisp_num-14)*10+(dispdisp_num-1&0x0f)-1; if(di

17、sp_num=1&set=-1) set=99; else if(disp_num=2&set=0) set=12; else if(disp_num=3&set=0) if(disp1=2) set = 29; else if(disp1=1|disp1=3|disp1=5|disp1=7|disp1=8|disp1=0x10|disp1=12) set = 31; else if(disp1=4|disp1=6|disp1=9|disp1=0x11) set = 30; else if(disp_num=4&set=0) set=7; else if(disp_num=5&set=-1)

18、set=23; else if(disp_num=6&set=-1) set=59; dispdisp_num-1=(set/10)4)*10+(dispdisp_num-1&0x0f)+1; if(disp_num=1&set=100) set=0; else if(disp_num=2&set=13) set=1; else if(disp_num=3) if(set=30&disp1=2) set = 1; else if(set=32&(disp1=1|disp1=3|disp1=5|disp1=7|disp1=8|disp1=0x10|disp1=12) set = 1; else

19、if(set=31&(disp1=4|disp1=6|disp1=9|disp1=0x11) set = 1; else if(disp_num=4&set=8) set=1; else if(disp_num=5&set=24) set=0; else if(disp_num=6&set=60) set=0; dispdisp_num-1=(set/10)4)+(set%10); break; case 3: disp_flag = 1; bell_flag = 1; switch(disp_num) case 0: disp_num = 5;break; case 5: disp_num = 6;break; case 6: set_time0 = disp4; set_time1 = disp5; disp_flag = 0; bell_flag = 0; disp_num = 0; break; break; default : break; /* 定时器中断函数*/void timer0() interrupt 1 TH0 = 0xFC; TL0 = 0xFF; k+; if(k=20) k =0;

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

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