已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LED点阵数字钟与温度计一、 系统设计方案本LED点阵数字钟基于STC89C52RC单片机设计,使用5片6*7的LED点阵作为显示屏。通过设计系统可以完成显示时间,日期,并增加了用DS18B20温度传感器显示温度的功能。同时,通过程序的改变可以为点阵数字钟扩充例如闹钟,字幕滚屏等功能。 LED点阵数字钟通过单片机来完成计时,设定,温度测量等功能。显示部分通过74HC595通用移位寄存器,完成点阵屏幕与单片机连接从而完成显示部分的功能。其系统组成框图如下:按键1按键2按键3STC89C52RCDS1302274HC595LED点阵图1二、 单元电路设计1.MCU控制部分单片机的时钟周期由外部12M晶振,时间信息则通过DS1302产生。DS1302通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。从而完成断电计时的功能。其中DS1302采用32.768KHz的晶振提供时钟周期(原理图见附录1)2.LED点阵显示部分 74HC595通用移位寄存器并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。点阵屏幕由5片6*7的LED点阵组成。采用74HC595来实现时钟的动态显示。点阵屏幕段选码由4片74HC595控制,段选数据由74HC595的SER引脚串行输入,由于输出使能时钟RCLK并接在一起,因此,4片74HC595并行输出端同时输出。而5个点阵位选信号也并接在一起,因此,一次可以同时点亮4列此过程类似于静态显示。每片74HC595并行输出端并接到点阵的每一位的引脚,用于扫描输出,此过程类似于动态扫描过程。此方法运用4片74HC595,7条位选信号,从而实现LED点阵的显示.其中位选控制端为通过经三极管放大后的P2口输出信号控制。(原理图见附录2)3.电源部分采用普通电源接口和USB接口,可以使用5V,400mA电源供电,亦可使用电脑USB供电。预设备用电源纽扣电池接口,保证时钟断电后继续走时。三、 程序设计1. 定义字符#include reg52.h#define uchar unsigned char #define uint unsigned int/74HC595管脚定义sbit S_DIO = P30; sbit S_CLK = P31; sbit R_CLK = P32;/按键管脚定义sbit KEY_1 = P11; sbit KEY_2 = P12; sbit KEY_3 = P10;/蜂鸣器管脚定义sbit BEEP = P27;/DS18B20管脚定义sbit DQ = P34;uchar temp_value; unsigned char tempL=0; /设全局变量unsigned char tempH=0; unsigned int sdata;/测量到的温度的整数部分unsigned char xiaoshu1;/小数第一位unsigned char xiaoshu2;/小数第二位unsigned char xiaoshu;/两位小数bit fg=1; /温度正负标志,等于0时为负数/DS1302管脚定义sbit T_CLK = P35; sbit T_IO = P36; sbit T_RST = P37; sbit ACC0 = ACC0;sbit ACC1 = ACC1;sbit ACC2 = ACC2;sbit ACC3 = ACC3;sbit ACC4 = ACC4;sbit ACC5 = ACC5;sbit ACC6 = ACC6;sbit ACC7 = ACC7;bit distime,disdate,disyear,distweek,diswendu,setyear,setdate,settime,setalarm,setweek;unsigned char code Bmp74= 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, ;unsigned char code font7= 0x38,0x44,0x64,0x54,0x4C,0x44,0x38,/0xF8,0x88,0x88,0x88,0x88,0x88,0xF8, /-0 0x10,0x18,0x10,0x10,0x10,0x10,0x38,/0x20,0x30,0x28,0x20,0x20,0x20,0xF8, /-1 0x38,0x44,0x40,0x20,0x10,0x08,0x7C,/0xF8,0x80,0x80,0xF8,0x08,0x08,0xF8, /-2 0x7C,0x20,0x10,0x20,0x40,0x44,0x38,/0xF8,0x80,0x80,0xF8,0x80,0x80,0xF8, /-3 0x20,0x30,0x28,0x24,0x7C,0x20,0x20,/0x48,0x48,0x48,0x48,0xF8,0x40,0x40, /-4 0x7C,0x04,0x3C,0x40,0x40,0x44,0x38,/0xF8,0x08,0x08,0xF8,0x80,0x80,0xF8, /-5 0x70,0x08,0x04,0x3C,0x44,0x44,0x38,/0xF8,0x08,0x08,0xF8,0x88,0x88,0xF8, /-6 0x7C,0x40,0x20,0x10,0x08,0x08,0x08,/0xF8,0x80,0x80,0x80,0x80,0x80,0x80, /-7 0x38,0x44,0x44,0x38,0x44,0x44,0x38,/0xF8,0x88,0x88,0xF8,0x88,0x88,0xF8, /-8 0x38,0x44,0x44,0x78,0x40,0x20,0x1C,/0xF8,0x88,0x88,0xF8,0x80,0x80,0x80, /-9 0x00,0x30,0x30,0x00,0x30,0x30,0x00, /-10-: 0x78,0x48,0x78,0x48,0x78,0x48,0x64, /-11-月0x78,0x48,0x48,0x78,0x48,0x48,0x78, /-12-日0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /-13- 0x00,0x00,0x00,0x00,0x00,0x00,0x00, /-14- 0x3C,0x44,0x44,0x44,0x44,0x44,0x3C, /-15- D0x44,0x44,0x44,0x28,0x10,0x10,0x10, /-16- Y 0x08,0xF8,0x24,0xF8,0x28,0xFC,0x20, /-17-年0x88,0xA8,0xA8,0xA8,0xA8,0xF8,0x70, /-18- W0x88,0x48,0x28,0x18,0x28,0x48,0x88,/-19- K0x00,0x00,0x00,0x38,0x00,0x00,0x00,/-20-0x00,0x00,0x00,0x00,0x00,0x30,0x30, /-21-.0xE8,0x10,0x10,0x10,0x10,0x10,0xE0, /-22- ;unsigned char idata DisTemp57;unsigned char idata Dis5;/时钟数据(7字节BCD码)格式为: 秒 分 时 日 月星期 年unsigned char idata Time7;/=0x30,0x42,0x23,0x18,0x06,0x04,0x09;unsigned char idata alarm2=0x30,0x06;uchar alarm_hh,alarm_ss,alarm_fg,alarm_off,flag;/闹钟unsigned char idata CSRow7=0x01,0x02,0x04,0x08,0x10,0x20,0x40;unsigned char idata second,minute,hour,day,month,week,year,time_revise;unsigned char idata keyvalue;unsigned long int idata Disbuf5;unsigned long int idata Disbuftemp7;unsigned int ss,i,TimeT1;/* * 函数名: Delay * 功能描述:延时(带参数) */ void Delay(unsigned int i) unsigned int j;for(j=0;j0; i-) T_IO = ACC0; T_CLK = 1; T_CLK = 0; ACC = ACC 1; /* * 函数名: ReadByteDS1302 * 功能描述: */ unsigned char ReadByteDS1302(void) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; ACC7 = T_IO; T_CLK = 1; T_CLK = 0; return(ACC); /* * 函数名: WriteDS1302 * 功能描述: */ void WriteDS1302(unsigned char Addr,unsigned char Data) T_RST = 0; T_CLK = 0; T_RST = 1; WriteByteDS1302(Addr); WriteByteDS1302(Data); T_CLK = 1; T_RST = 0;/* * 函数名: ReadDS1302 * 功能描述: */ unsigned char ReadDS1302(unsigned char Addr) unsigned char Data; T_RST = 0; T_CLK = 0; T_RST = 1; WriteByteDS1302(Addr); Data = ReadByteDS1302(); T_CLK = 1; T_RST = 0; return(Data);/* * 函数名: Set * 功能描述:设置 * */ void Set(unsigned char sel,unsigned char selby) unsigned char address,item; unsigned char max,min; if(sel=0) address=0x80; max=59;min=0; /秒 if(sel=1) address=0x82; max=59;min=0; /分钟 if(sel=2) address=0x84; max=23;min=0; /小时 if(month=2)if(flag=1)if(sel=3) address=0x86; max=28;min=1; elseif(sel=3) address=0x86; max=27;min=1;else if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) if(sel=3) address=0x86; max=31;min=1;if(month=4|month=6|month=9|month=11) if(sel=3) address=0x86; max=30;min=1;if(sel=4) address=0x88; max=12;min=1; /月 if(sel=5) address=0x8a; max=7; min=1; /星期 if(sel=6) address=0x8c; max=99;min=0; /年 if(sel=7) address=0xc0; max=59;min=0; /闹钟分钟 if(sel=8) address=0xc2; max=23;min=0; /闹钟小时 item=ReadDS1302(address+1)/16*10+ReadDS1302(address+1)%16; if (selby=0) item+; else item-; if(itemmax) item=min; if(item0; h-) WriteDS1302(Addr,*pClock); pClock+; Addr+=2; WriteDS1302(0x90,0xa5); WriteDS1302(0x8e,0x80); /* * 函数名: ReadTime * 功能描述: */ void ReadTime() Second = BCD2HEX(Time0=ReadDS1302(0x81); minute = BCD2HEX(Time1=ReadDS1302(0x83);hour = BCD2HEX(Time2=ReadDS1302(0x85);day = BCD2HEX(Time3=ReadDS1302(0x87);month = BCD2HEX(Time4=ReadDS1302(0x89);year = BCD2HEX(Time5=ReadDS1302(0x8d); week = BCD2HEX(Time6=ReadDS1302(0x8b);alarm_ss = BCD2HEX(alarm0=ReadDS1302(0xc1);alarm_hh = BCD2HEX(alarm1=ReadDS1302(0xc3); /* * 函数名: WriteTime * 功能描述: */ void WriteTime()WriteDS1302(0x8e,0x00); WriteDS1302(0x80,HEX2BCD(second);WriteDS1302(0x82,HEX2BCD(minute);WriteDS1302(0x84,HEX2BCD(hour);WriteDS1302(0x86,HEX2BCD(day);WriteDS1302(0x88,HEX2BCD(month);WriteDS1302(0x8A,HEX2BCD(week);WriteDS1302(0x8C,HEX2BCD(year);WriteDS1302(0xc0,HEX2BCD(alarm_ss);WriteDS1302(0xc2,HEX2BCD(alarm_hh); WriteDS1302(0x90,0xa5); WriteDS1302(0x8e,0x80);/* * 函数名: StopTime * 功能描述: */ void StopTime() second = BCD2HEX(Time0=ReadDS1302(0x81); WriteDS1302(0x8e,0x00); WriteDS1302(0x80,HEX2BCD(second)|0x80); WriteDS1302(0x90,0xa5); WriteDS1302(0x8e,0x80);/* * 函数名: StartTime * 功能描述: */ void StartTime() WriteDS1302(0x8e,0x00); WriteDS1302(0x80,HEX2BCD(second)&0x7f); WriteDS1302(0x90,0xa5); WriteDS1302(0x8e,0x80);/温度处理程序/*ds18b20延迟子函数(晶振12MHz )*/ void delay_18B20(unsigned int i)while(i-);/*ds18b20初始化函数*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(16); /稍做延时 DQ = 0; /单片机将DQ拉低 delay_18B20(160); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(28); x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(40);/*ds18b20读一个字节*/ unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(8); return(dat);/*ds18b20写一个字节*/ void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(10); DQ = 1; dat=1; /*读取ds18b20当前温度*函数名:ReadTemperature(void)*功能描述:读温度值(低位放tempL;高位放tempH;)*/ void ReadTemp(void) Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的操作 WriteOneChar(0x44); /启动温度转换 delay_18B20(200); /转换需要一点时间,延时 Init_DS18B20(); /初始化 WriteOneChar(0xcc); /跳过读序列号的操作 WriteOneChar(0xbe); /读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); /读出温度的低位LSB tempH=ReadOneChar(); /读出温度的高位MSB if(tempH0x7f) /最高位为1时温度是负 tempL=tempL+1; /补码转换,取反加一 tempH=tempH; fg=0; /读取温度为负时fg=0 else fg=1;sdata = tempL/16+tempH*16; /整数部分xiaoshu1 = (tempL&0x0f)*10/16; /小数第一位xiaoshu2 = (tempL&0x0f)*100/16;/小数第二位xiaoshu=xiaoshu1*10+xiaoshu2; /小数两位/温度处理程序结束/* * 函数名: DisPlay * 功能描述: */ void DisPlay() unsigned char i,j; for(i=0;i7;i+) P2=0xFF; for(j=0;j4;j+) OutData(unsigned char *)&Disbuftempi)3-j); R_CLK=1;R_CLK=0;P2=CSRowi; BEEP=1; Delay(250); P2=0xff;/* * 函数名: SetDis * 功能描述:设置显示内容菜单 */ void SetDis() if(distime=1)/时分显示,秒针闪动 if(hour/10)=0) Dis0=14;else Dis0=hour/10; Dis1=hour%10; Dis3=minute/10; Dis4=minute%10; if(second%10)%2) Dis2=14; else Dis2=10; else if(disdate=1)/月、日显示 Dis0=month/10; Dis1=month%10; Dis3=day/10; Dis4=day%10; Dis2=20; else if(disyear=1)/年显示 Dis0=2; Dis1=0; Dis2=year/10; Dis3=year%10; Dis4=17; else if(distweek=1)/星期显示 Dis0=18; Dis1=19; Dis2=14; Dis3=14; Dis4=week%10; else if(diswendu=1)/显示温度 if(fg=0) Dis0=20;elseDis0=sdata/10; Dis1=sdata%10; Dis2=21; Dis3=xiaoshu1; Dis4=22; else if(settime=1)/设定时间显示、秒不闪动 if(hour/10)=0) Dis0=14;else Dis0=hour/10; Dis1=hour%10; Dis3=minute/10; Dis4=minute%10; Dis2=10; else if(setalarm=1)/设定闹钟时分 if(alarm_hh/10)=0) Dis0=14;else Dis0=alarm_hh/10; Dis1=alarm_hh%10; Dis3=alarm_ss/10; Dis4=alarm_ss%10; Dis2=10; else if(setdate=1)/月、日显示 Dis0=month/10; Dis1=month%10; Dis3=day/10; Dis4=day%10; Dis2=20; else if(setyear=1)/年显示 Dis0=2; Dis1=0; Dis2=year/10; Dis3=year%10; Dis4=17; else if(setweek=1)/星期显示 Dis0=18; Dis1=19; Dis2=14; Dis3=14; Dis4=week%10; /* * 函数名: DisProcess * 功能描述:装载显示数据 */ void DisProcess() unsigned char i,j; for(i=0;i5;i+) for(j=0;j7;j+) DisTempij=fontDisij; for(i=0;i7;i+) Disbuf0=DisTemp4i; Disbuf1=DisTemp3i; Disbuf2=DisTemp2i; Disbuf3=DisTemp1i; Disbuf4=DisTemp0i; Disbuftempi=Disbuf024|Disbuf118|Disbuf212|Disbuf36|Disbuf4; /* * 函数名: KeyCheck * 功能描述:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江工业大学设计与建筑学院招聘办公室教务秘书1名(人才派遣A岗)笔试备考试题及答案详解
- 2026年郑州市航空港区专项计划招聘社区网格事务协理员30人笔试备考题库及答案详解
- 井冈山市古城镇招聘公益性岗位工作人员笔试备考题库及答案详解
- 2026陕西开放大学(陕西工商职业学院)储备师资及专职辅导员招聘(23人)笔试备考试题及答案详解
- 11-24072025供暖系统入户巡检规程
- 2026年农业发展银行(陕西省分行)校园招聘笔试备考题库及答案详解
- 2026广东江门市侨盛水务有限公司招聘1人笔试参考题库及答案详解
- 2026四川绵阳东辰高级中学招聘教师83人笔试参考题库及答案详解
- 2026广东广州生态环境监测中心站招聘编外人员3人笔试备考题库及答案详解
- 交通银行四川省分行2026年暑期实习生招聘笔试参考题库及答案详解
- AutoCAD 2016基础与应用案例教程
- 2026年绿色工厂数字化能碳管理平台建设方案
- 初级护工考试试题及答案
- 保密人员工作考核制度
- 人民调解枫桥经验培训课件
- 餐饮提升销售方案
- 人民医院档案管理制度
- 循环性休克及血流动力学监测概览
- 2025年重庆市初中生物学业水平考试试卷试题(含答案解析)
- 疼痛的评估与护理措施
- 老年患者跌倒预防与安全管理
评论
0/150
提交评论