课程设计论文-基于at89s52单片机的电子万年历设计内容摘要:
{ uint x,y。 for(x=z。 x0。 x) for(y=112。 y0。 y)。 } /*********************************************************** ******************DS1302 驱动程序 ****************** ************************************************************/ void DS1302InputByte(unsigned char d) //实时时钟写入一字节 (内部函数 ) { unsigned char i。 ACC = d。 for(i=8。 i0。 i) { DS1302_IO = ACC0。 //相当于汇编中的 RRC DS1302_CLK = 1。 DS1302_CLK = 0。 ACC = ACC 1。 } } unsigned char DS1302OutputByte(void) //实时时钟读取一字节 (内部函数 ) { unsigned char i。 for(i=8。 i0。 i) { ACC = ACC 1。 //相当于汇编中的 RRC ACC7 = DS1302_IO。 DS1302_CLK = 1。 DS1302_CLK = 0。 } return(ACC)。 } void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302 地址 , ucData: 要写的数据 { DS1302_RST = 0。 DS1302_CLK = 0。 徐州师范 大学 物理与 电子工程学院课程 设计 报告 14 DS1302_RST = 1。 DS1302InputByte(ucAddr)。 // 地址,命令 DS1302InputByte(ucDa)。 // 写 1Byte 数据 DS1302_CLK = 1。 DS1302_RST = 0。 } unsigned char Read1302(unsigned char ucAddr) //读取 DS1302 某地址的数据 { unsigned char ucData。 DS1302_RST = 0。 DS1302_CLK = 0。 DS1302_RST = 1。 DS1302InputByte(ucAddr|0x01)。 // 地址,命令 ucData = DS1302OutputByte()。 // 读 1Byte 数据 DS1302_CLK = 1。 DS1302_RST = 0。 return(ucData)。 } void DS1302_init() { if(Read1302(0xc1) != 0xf0) { Write1302(0x8e,0x00)。 //允许写操作 Write1302(0xc0,0xf0)。 //写 入初始化标志 ,系统上电后检测此标志,即此子函数只会在第一次初始化一次。 /******时间初始值 ******/ Write1302(0x8c,0x10)。 //年 Write1302(0x88,0x04)。 //月 Write1302(0x86,0x06)。 //日 Write1302(0x84,0x22)。 //时 Write1302(0x82,0x59)。 //分 Write1302(0x80,0x55)。 //秒 Write1302(0x90,0xa4)。 //充电 Write1302(0x8e,0x80)。 //禁止写操作 } } /*********************************************************** ******************DS18B20 驱动程序 ****************** ************************************************************/ /*************************************************************************************/ void delay_18b20(unsigned int i)//延时函数 { 徐州师范 大学 物理与 电子工程学院课程 设计 报告 15 while(i)。 } /***************************************************************************************/ //18b20 初始化函数 void Init_DS18B20(void) { unsigned char x=0。 DQ = 1。 //DQ 复位 delay_18b20(8)。 //稍做延时 DQ = 0。 //单片机将 DQ 拉低 delay_18b20(80)。 //精确延时 大于 480us DQ = 1。 //拉高总线 delay_18b20(10)。 x=DQ。 //稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 delay_18b20(5)。 } //读一个字节 unsigned char ReadOneChar(void) { unsigned char i=0。 unsigned char dat = 0。 for (i=8。 i0。 i) { DQ = 0。 // 给脉冲信号 dat=1。 DQ = 1。 // 给脉冲信号 if(DQ) dat|=0x80。 delay_18b20(5)。 } return(dat)。 } //写一个字节 void WriteOneChar(unsigned char dat) { unsigned char i=0。 for (i=8。 i0。 i) { DQ = 0。 DQ = datamp。 0x01。 delay_18b20(5)。 徐州师范 大学 物理与 电子工程学院课程 设计 报告 16 DQ = 1。 dat=1。 } delay_18b20(5)。 } //读取温度 unsigned char ReadTemperature(void) { unsigned char a=0。 unsigned char b=0。 unsigned char t=0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 delay_18b20(200)。 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器等 ( 共可读 9 个寄存器 ) 前两个就是温度 a=ReadOneChar()。 b=ReadOneChar()。 b=4。 b+=(aamp。 0xf0)4。 t=b。 return(t)。 } /*************************************************/ void display() { //年 P2=0xf0。 P0=seg[2]。 delay(1)。 P2=0xf1。 P0=seg[0]。 delay(1)。 P2=0xf2。 P0=seg[year/16]。 delay(1)。 P2=0xf3。 P0=seg[year%16]。 徐州师范 大学 物理与 电子工程学院课程 设计 报告 17 delay(1)。 //month P2=0xf4。 P0=seg[month/16]。 delay(1)。 P2=0xf5。 P0=seg[month%16]。 delay(1)。 //date P2=0xf6。 P0=seg[date/16]。 delay(1)。 P2=0xf7。 P0=seg[date%16]。 delay(1)。 // hour P2=0xf8。 P0=seg[hour/16]。 delay(1)。 P2=0xf9。 P0=seg[hour%16]。 delay(1)。 //minute P2=0xfa。 P0=seg[minute/16]。 delay(1)。 P2=0xfb。 P0=seg[minute%16]。 delay(1)。 //second P2=0xfc。 P0=seg[second/16]。 delay(1)。 P2=0xfd。 P0=seg[second%16]。 delay(1)。 //temp P2=0xfe。 P0=seg[temp/10]。 徐州师范 大学 物理与 电子工程学院课程 设计 报告 18 delay(1)。 P2=0xff。 P0=seg[temp%10]。 delay(1)。 //week encode=1。 week_wei=0。 P0=seg[week]。 delay(1)。 encode=0。 week_wei=1。 P0=0。 } void set() { if(mode==0) { delay(5)。 if(mode==0) { position++。 if(。课程设计论文-基于at89s52单片机的电子万年历设计
相关推荐
的模拟信号。 START: A/D 转换启动信号,输入, 高电平有效。 在使用时,该信号通常与 ALE 信号连在一起,以便在锁存通道地址的同时启动 A/D 转换。 CLK:时钟脉冲输入端。 允许最高输入频率为 1280kHz,此时其转换时间为 75μs。 若时钟频率下降,时间随之增加。 如 CLK 选 640KHz,则转换时间为 100μs。 若 CLK 选 500KHz,则转换时间为
对成本是敏感的 � 所以目前占统治地位的软件还是最低级 现高智能 � 高效率 � 以及高可靠性 � 单片机 � 结果就会有天壤之别 � 只因为单片机的通过你编写的程序可以实 路一定是一块大 PCB板 � 但是如果要是用美国 70年代成功投放市场的系列 代开发的 74系列 � 或者 60年代的 CD4000系列这些纯硬件来搞定的话 � 电 有些则是花大力气也很难做到的。
********************************************************** unsigned char LCD_Wait(void) {LcdRs=0。 LcdRw=1。 _nop_()。 LcdEn=1。 _nop_()。 LcdEn=0。 return DBPort。 } //向 LCD 写入命令或数据
00 编译器 Protues 仿真平台 简介 Protues 软件是英国 Labcenter electronics 公司出版的 EDA 工具软件。 它不仅具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器件。 它是目前最好的仿真单片机及外围器件的工具。 虽然目前国内推广 刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐 , Protues
组成。 MCS— 51 中的寄存器较多,大体可分为通用寄存器和专用寄存器两类。 图 微处理器存储器结构 MCS— 51 存储器配置:微型计算机必须配置一定数量的存储器,但不同的微型计算机存储器的配置不同。 一种是程序与数据共用一个存储器,如图 3(a)所示。 一般的通用计算机都采用此种形式。 另一种是将程序与数据分别放在两个存储器内,一个称程序存储器,另一个称数据存储器,如图 3(b)所示。
电压。 唐山学院课程设计 5 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 逐次逼近式 A/D 转换模块设计 逐次逼近型 A/D 转换器属于直接型 A/D 转换器,它能把输入的模拟电压直接转换为输出的数字代码,而不需要经过中间变量。 主要由比较器、环形分配器、控制门、寄存器与 D/A 转换器组成。 引脚功能 图 14 ADC0808 引脚图