文档详情

基于PIC16F877A单片机的温度,时间显示..doc

发布:2017-01-17约1.6万字共45页下载文档
文本预览下载声明
基于PIC16F877A单片机的温度,时间显示以及闹钟设置,硬件和软件配备 一,硬件图 #includepic.h __CONFIG(0x3B31); #define rs RD0 #define rw RD1 #define en RD2 #define BEEP RD3 #define s1 RA0 #define s2 RA1 #define s3 RA2 #define s4 RA3 #define uint unsigned int #define uchar unsigned char signed char set_time[7]={0,58,23,6,1,5,12};//秒 分 时 星期 日 月 年 signed char read_time[7]={0,0,0,0,0,0,0}; signed char shi=7,fen=15,alarm_time=1,reapeat_fen=2,cent;//闹钟时,闹钟分,闹铃响分钟,闹铃响间隔 uchar s1_num,s2_num; const uchar alarm[]={ALARM TIME:}; const uchar mode[]={MODE:}; const uchar rpt[]={RPT:}; const uchar min[]={min}; void PORT_INIT() { TRISA=0xff;//A口设置为输入 ADCON1=0x06;//RA口上电复位为模拟输入口 TRISC3=1;//SCL和SDA设置为输入 TRISC4=1; TRISD=0x00;//D口设置为输出 } void IIC_INIT() { SSPCON=0x28; STAT_SMP=0; SSPADD=4; } void delayms(uint z)//延时 函数 { uint x,y; for(x=z;x0;x--) for(y=110;y0;y--); } void delayus(uint k) { while(k--); } void write_byte_low(uchar R1,uchar flag0)//写一个字节的低4位,flag0为指令/数据选择位 { //,0为写指令,1为写数据 uchar low; rs=flag0; low=R10x0f; low=low4; PORTD=0x0f;NOP(); PORTD|=low;NOP();//写指令的低4位 en=1;delayus(20);en=0; } void lcd_write(uchar dat,uchar flag1)//写指令/数据到1602 { uchar dat_high,dat_low; dat_high=dat4; write_byte_low(dat_high,flag1); dat_low=dat0x0f; write_byte_low(dat_low,flag1); NOP(); } void write_string(uchar address,uchar const *str)//往指定的地址写字符串 { uchar i=0; lcd_write(address,0); while(str[i]!=\0) { lcd_write(str[i],1); delayus(5); i++; } } void LCD_INIT()//初始化函数 { rw=0; en=0; delayms(20); write_byte_low(0b0011,0); delayms(1); write_byte_low(0b0011,0); delayus(10); write_byte_low(0b0011,0); delayus(10); write_byte_low(0b0010,0); delayms(1); lcd_write(0x28,0); delayms(5); lcd_write(0x0c,0); delayms(5); lcd_write(0x01,0); delayms(5); lcd_write(0x06,0); delayms(5); } void naoling() { uchar i; for(i=0;i20;i++) { BEEP=1; delayus(5); BEEP=0; delayus(5); } } void IIC_SEND(uchar num) { SSPBUF=num; while(STAT_R
显示全部
相似文档