pic c语言 pdf,用PIC16F877A制作的电子万年历(含原理图和详细的PICC语言程序).pdf

PIC16F877APIC16F877APIC16F877APIC16F877A 万年历程序万年历程序万年历程序万年历程序 一、说明: 1.本数字始时钟可以显示日期,时间,并具有农历与星期查询功能 2.具有环境温度检测功能。 3.三组闹钟设置。 二、使用方法: 1.使用“设置“键可以方便切换要设置的对象,并配合+、-键使之设置成你要的数值。 2.当设置闹钟时,当调到想要设置的时间时,按存储键即可存入第一组闹钟,以此类推共可以 设置三组。 三、原理图见附录 1: 四、源程序 /*************************************************** * 标题:万年历* * 作者:* * 日期:2008 年 1 月 13 日* * 说明:包含文件,* ***************************************************/ #include #include “ziku.h“ #include “lcd_init.h“ #include “ds1302.h“ #include “ds18b20.h“ #include “keyscan.h“ #include “yinli.h“ uch jj,ii; //子程序 //LCD 显示空白边框子程序 void LCDShowTable() { uch i; SlectScreen(1);//写左半屏 SetLine(0);//起使页 SetColumn(0);//起使列 for(i=0;i64;i++) { if((i==0)||(i==63))WriteData(0xff);//第 1、63 列竖线 else WriteData(0x01);//最上面一行线 } for(i=1;i7;i++) { SetLine(i); SetColumn(0); WriteData(0xff); //竖线 SetColumn(63); WriteData(0xff); //竖线 } SetLine(7); SetColumn(0); for(i=0;i64;i++) { if((i==0)||(i==63))WriteData(0xff); else WriteData(0x80);//最下面的横线 } SlectScreen(2);//写右半屏 SetLine(0); SetColumn(0); for(i=0;i64;i++) { if(i==63)WriteData(0xff); else WriteData(0x01); } SetLine(4); SetColumn(0); for(i=0;i64;i++) { if(i==63)WriteData(0xff); else WriteData(0x01); } for(i=1;i7;i++) { SetLine(i); SetColumn(63); WriteData(0xff); } SetLine(7); SetColumn(0); for(i=0;i64;i++) { if(i==63)WriteData(0xff); else WriteData(0x80); } } /*----------------------------------------------------------*/ //显示固定字符子程序 void LCDShowGudingWord() { Show8X16(0,80,maohao,1); Show8X16(0,104,maohao,1); Show16X16(6,80,yue,2); Show16X16(0,40,nian,1); Show16X16(4,2,yue,0); Show16X16(6,8,xing,2); Show16X16(6,24,qi,2); Show16X16(2,96,danwei1,0); Show8X16(0,8,s2,1); Show8X16(0,16,s0,1); } /*----------------------------------------------------------*/ void TMR0init() { T0CS=0; PSA=0; PS2=1; PS1=1; PS0=1; TMR0=0x80; T0IE=1; T0IF=0; } //冒号闪烁子程序 void FlashMaohao() { static uch timecount1; static int timecount2; if(TMR0IF==1) { TMR0=0x80; TMR0IF=0; timecount1++; timecount2++; if(timecount1==10) { flag++; flag=flag%2;//闪烁标志在 0-1 间翻转 timecount1=0; } if(timecount2==1200)//1 分钟采样一次温度 { timecount2=0; get_temp();//温度转换子程序 } } if(flag==0) { Show8X16(0,80,maohao,1); Show8X16(0,104,maohao,1); } if(flag==1) { Show8X16(0,80,noshu,1);//清除 Show8X16(0,104,noshu,1); } } void Naoling() { if(kk==1) { if(RD3==0) { jj++; jj=jj%4; while(1) { if(RD3==1)break; } } if(jj==1) { Naoling_hour_1= Naoling_hour; Naoling_minute_1=Naoling_minute; RC4=1; RC6=0; RC7=0; } if(jj==2) { Naoling_hour_2= Naoling_hour; Naoling_minute_2=Naoling_minute; RC4=0; RC6=1; RC7=0; } if(jj==3) { Naoling_hour_3= Naoling_hour; Naoling_minute_3=Naoling_minute; RC4=0; RC6=0; RC7=1; } } } void NaolingXiang() { int i; if((kk==1) for(i=0;i100;i++); RC5=0; for(i=0;i500;i++); } if((kk==1) for(i=0;i100;i++); RC5=0; for(i=0;i200;i++); } if((kk==1) for(i=0;i200;i++); RC5=0; for(i=0;i500;i++); } } //查询子程序 void chaxun() { if(RD3==0) { ii++; ii=ii%2; } while(1) { if(RD3==1)break; } if(ii==1) { KeyScan(); } } //主程序 void main() { keyinit();//键盘初始化 LCDinit();//LCD 操作初始化 LCDShowTable();//显示空白表格 LCDShowGudingWord();//显示固定字符 get_temp();//读取温度 TMR0init(); while(1) { v_Get1302(clock);//读取时间、日历 display(); FlashMaohao();//冒号闪烁 KeyScan();//键盘扫描 GetWeek(clock[6]+2000,clock[4],clock[3]); GetChinaCalendar(clock[6]+2000,clock[4],clock[3]); //Naoling(); //NaolingXiang(); chaxun(); } } 附录附录附录附录 1111::::

展开阅读全文

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值