基于PIC16F887单片机的数字钟完整程序代码_第1页
基于PIC16F887单片机的数字钟完整程序代码_第2页
基于PIC16F887单片机的数字钟完整程序代码_第3页
基于PIC16F887单片机的数字钟完整程序代码_第4页
基于PIC16F887单片机的数字钟完整程序代码_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include _CONFIG (0x20F1);_CONFIG (0x3FFF); /调试用#define LCD_E RD6 /LCD E 读写使能控制#define LCD_RW RD5/LCD 读(1)/写(0)控制线#define LCD_RS RD4/LCD 寄存器选择 数据(1)指令(0)/RD4-RD7 分别接 DB4-DB7,RD7 为忙标志#define COM 0 /在 LCD_WRITE()中的第 2 参数为 0 表示写命令#define DAT 1 /在 LCD_WRITE()中的第 2 参数为 1 表示写数据#define mod RB3/模式选择(时间、闹钟、温度、秒表)#define set RB0/选择按键#define add RB1/加按键#define miu RB2/减按键#define RTR 0b00000000 /TC74 的读温度命令#define TC74_ADD 0b1001101 /TC74 的 7 位地址#define LINE1 0b10000000#define LINE2 0b11000000signed char hourt,mint,sect;/闹钟设置位int f;/闹钟显示清零判断char flag=0;/按键标志位char WW,QW,BW,SW,GW,M;char table=“Mon Tue Wed Thu Fri Sat Sun “;/星期signed char year,month,day,week,hour,min,sec,a,T;bank1 char DD16; /一行 LCD 显示数据暂存char A7;/DS1307 读数/=LCD 程序void CSH(void); /初始化void LCD_CSH(void); /LCD 初始化void LCD_BUSY(void); /检测 LCD 是否忙char LCD_READ(void); /读 LCD,忙检测用void LCD_WRITE(char,char); /LCD 写 1 字节,命令或数据void LCD_WRITE_4(char,char); /LCD 写半字节void DISP_C(char); /在指定行中显示字符,字符在数组 DD 中void DISP_MENU(const char *); /由常数数组显示整屏字符void DELAY_US(char);void DELAY(unsigned int);void delaynms(unsigned int);/=DS1307void IIC_SEND(char);void IIC_CSH(void);void READ_DS1307(char addr,char n);void write_DS1307(char addr,char data);void DS1307_CSH(void);/DS1307 初始化void MENU_DS1307(void);/=温度void DISP_T(signed char R1); /温度在 R1signed char READ_T(void);void clock();/闹钟void set_time(void);/按键void bcd_dec(char adr,char R);char dec_bcd(char dec);void BCD(unsigned int R1);void guangbiao(void);/光标/=主程序void main()CSH();READ_DS1307(0,7);/读 DS1307if(A0/判断是否初始化while(1) clock();set_time();/按键检测delaynms(50);if(flag=0) READ_DS1307(0,7);/读 DS1307MENU_DS1307();/显示 DS1307T=READ_T();/读温度DISP_T(T);/显示温度/=初始化端口void CSH(void)TRISD=0b00000000; /控制 LCD1604,全为输出RD7=1; /背光TRISB=0x0FF;RBPU=0;WPUB=0x0FF;ANSELH=0;PORTB=0x00;/=PWM 设置TRISC1=0; /RC1 为输出RC1=0;PR2=124; /周期为 1msCCPR2L=0x32;CCP2CON=0b00000000;/关闭 PWMT2CON=0b00000110; /TMR2 预分频 1:16,开始工IIC_CSH();LCD_CSH();/LCD 模块初始化void LCD_CSH(void) DELAY(20); /延时 20msLCD_WRITE_4(0b0011,COM); /发送控制序列DELAY_US(10); /延时 100usLCD_WRITE_4(0b0011,COM); /发送控制序列DELAY_US(10); /延时 100usLCD_WRITE_4(0b0011,COM); /发送控制序列DELAY_US(10); /延时 100usLCD_WRITE_4(0b0010,COM); /4 位数据格式LCD_BUSY(); /LCD 忙检测LCD_WRITE(0b00101000,COM); /4 位数据格式, 2 行,57 点阵LCD_WRITE(0b00001100,COM); /D(d2)=1:打开显示,C(d1)=1: 光标打开,B(d0)=1:光标不闪烁LCD_WRITE(0b00000001,COM); /清除显示DELAY(2); /延时 2msLCD_WRITE(0b00000110,COM); /输入模式,I/D(d1)=1:地址加 1,S(d0)=1:显示移位关闭/=读 LCD 状态char LCD_READ(void) unsigned char R1;TRISD|=0X0F; /LCD 数据线为输入LCD_RS=0; /寄存器选择LCD_RW=1;NOP(); /读为 1LCD_E=1;NOP(); /使能R1=0; /短延时R1=(PORTD4; /取高 4 位LCD_WRITE_4(R2,FLAG); /先写高 4 位R2=(R1 /高 4 位清 0,取低 4 位LCD_WRITE_4(R2,FLAG); /再送低 4 位DELAY_US(10); /延时 100us/写 R1 的低 4 位,FLAG 为寄存器选择,1 为命令,0 为数据void LCD_WRITE_4(char R1,char FLAG) TRISDLCD_RW=0;NOP(); /写模式LCD_RS=FLAG;NOP(); /寄存器选择PORTD NOP(); /RD 低 4 位先清 0LCD_E=1;NOP(); /使能R1=(R1 /R1 低 4 位送至低 4 位PORTD |=R1;NOP(); /送 4 位LCD_E=0;NOP(); /数据送入有效,下降沿送入LCD_RS=0;NOP();PORTD /RD 低 4 位清 0/=检测 LCD 是否忙void LCD_BUSY(void) unsigned char R1;while(1) R1=LCD_READ(); /读寄存器if (R1 ;/=延时(n)msvoid DELAY(unsigned int n)unsigned int j;char k;for (j=0;j0;k-) NOP();/=延时(n)msvoid delaynms(unsigned int n)unsigned int j;char k;for (j=0;j0;k-) NOP();/=延时(n10)usvoid DELAY_US(char n) char j;for (j=0;j4)+0x30,DAT);LCD_WRITE(A6LCD_WRITE(-,DAT);LCD_WRITE(A54)+0,DAT);LCD_WRITE(A5LCD_WRITE(-,DAT);LCD_WRITE(A44)+0,DAT);LCD_WRITE(A4LCD_WRITE( ,DAT);i=A3LCD_WRITE(table(i-1)*4,DAT);LCD_WRITE(table(i-1)*4+1,DAT);LCD_WRITE(table(i-1)*4+2,DAT);LCD_WRITE(table(i-1)*4+3,DAT);/LCD_WRITE( ,DAT);LCD_WRITE(LINE2,COM); /DDRAM 地址,第 2 行的第 1 个字符LCD_WRITE( ,DAT);LCD_WRITE(A24)+0,DAT);LCD_WRITE(A2LCD_WRITE(0x3A,DAT);LCD_WRITE(A14)+0,DAT);LCD_WRITE(A1LCD_WRITE(0x3A,DAT);LCD_WRITE(A04)+0,DAT);LCD_WRITE(A0LCD_WRITE( ,DAT);char dec_bcd(char dec)char bcd;bcd= 0;while(dec = 10) dec -= 10; bcd+; bcd 4;GW=Aadrwhile(SW0)R=R+10;SW-;R+=GW;/=按键程序void set_time()if(mod=0) delaynms(30);if(mod=0)while(!mod);/等待M+;if(M=3) M=0;flag=0;f=0;a=0;if(M=1)/设置时间if(set=0) delaynms(30);if(set=0)while(!set);a+;if(a=8)a=0;guangbiao();/光标定位,闪烁if(a=1)if(add=0)delaynms(30);if(add=0)while(!add);bcd_dec(0,sec);sec+;if(sec=60)sec=0;write_DS1307(0,dec_bcd(sec);if(miu=0)del

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论