课程设计论文-基于单片机的电子万年历设计报告书内容摘要:
********************************************************** unsigned char LCD_Wait(void) {LcdRs=0。 LcdRw=1。 _nop_()。 LcdEn=1。 _nop_()。 LcdEn=0。 return DBPort。 } //向 LCD 写入命令或数据 ************************************************************ define LCD_COMMAND 0 // Command define LCD_DATA 1 // Data define LCD_CLEAR_SCREEN 0x01 // 清屏 define LCD_HOMING 0x02 // 光标返回原点 void LCD_Write(bit style, unsigned char input) {LcdEn=0。 LcdRs=style。 LcdRw=0。 _nop_()。 DBPort=input。 _nop_()。 //注意顺序 LcdEn=1。 _nop_()。 //注意顺序 LcdEn=0。 _nop_()。 LCD_Wait()。 } //设置显示模式 ************************************************************ define LCD_SHOW 0x04 //显示 开 define LCD_HIDE 0x00 //显示关 define LCD_CURSOR 0x02 //显示光标 define LCD_NO_CURSOR 0x00 //无光标 define LCD_FLASH 0x01 //光标闪动 define LCD_NO_FLASH 0x00 //光标不闪动 void LCD_SetDisplay(unsigned char DisplayMode) {LCD_Write(LCD_COMMAND, 0x08|DisplayMode)。 } //设置输入模式 ************************************************************ define LCD_AC_UP 0x02 define LCD_AC_DOWN 0x00 // default define LCD_MOVE 0x01 // 画面可平移 define LCD_NO_MOVE 0x00 //default void LCD_SetInput(unsigned char InputMode) {LCD_Write(LCD_COMMAND, 0x04|InputMode)。 } //初始化 LCD************************************************************ void LCD_Initial() {LcdEn=0。 LCD_Write(LCD_COMMAND,0x38)。 //8 位数据端口 ,2 行显示 ,5*7 点阵 LCD_Write(LCD_COMMAND,0x38)。 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR)。 //开启显示 , 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN)。 //清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE)。 //AC 递增 , 画面不动 } //液晶字符输入的位置 ************************ void GotoXY(unsigned char x, unsigned char y) {if(y==0)LCD_Write(LCD_COMMAND,0x80|x)。 if(y==1)LCD_Write(LCD_COMMAND,0x80|(x0x40))。 } 14 //将字符输出到液晶显示 void Print(unsigned char *str) {while(*str!=39。 \039。 ) {LCD_Write(LCD_DATA,*str)。 str++。 }} /***********DS1302 时钟部分子程序 ******************/ typedef struct __SYSTEMTIME__ { unsigned char Second。 unsigned char Minute。 unsigned char Hour。 unsigned char Week。 unsigned char Day。 unsigned char Month。 unsigned char Year。 unsigned char DateString[11]。 unsigned char TimeString[9]。 }SYSTEMTIME。 //定义的时间类型 SYSTEMTIME CurrentTime。 define AM(X) X define PM(X) (X+12) // 转成 24 小时制 define DS1302_SECOND 0x80 //时钟芯片的寄存器位置 ,存放时间 define DS1302_MINUTE 0x82 define DS1302_HOUR 0x84 define DS1302_WEEK 0x8A define DS1302_DAY 0x86 define DS1302_MONTH 0x88 define DS1302_YEAR 0x8C 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。 DS1302_RST = 1。 DS1302InputByte(ucAddr)。 // 地址,命令 DS1302InputByte(ucDa)。 // 写 1Byte 数据 DS1302_CLK = 1。 DS1302_RST = 0。 } unsigned char Read1302(unsigned char ucAddr) //读取 DS1302 某地址的数据 { unsigned char ucData。 15 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_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组 {unsigned char ReadValue。 ReadValue = Read1302(DS1302_SECOND)。 TimeSecond = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_MINUTE)。 TimeMinute = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_HOUR)。 TimeHour = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_DAY)。 TimeDay = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_WEEK)。 TimeWeek = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_MONTH)。 TimeMonth = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 ReadValue = Read1302(DS1302_YEAR)。 TimeYear = ((ReadValueamp。 0x70)4)*10 + (ReadValueamp。 0x0F)。 } void DateToStr(SYSTEMTIME *Time) //将时间年 ,月 ,日 ,星期数据转换成液晶显示字符串 ,放到数组里 DateString[] { if(hide_year2) //这里的 if,else 语句都是判断位闪烁 ,2 显示数据 ,2 就不显示 ,输出字符串为 2020/07/22 { TimeDateString[0] = 39。 239。 TimeDateString[1] = 39。 039。 TimeDateString[2] = TimeYear/10 + 39。 039。 TimeDateString[3] = TimeYear%10 + 39。 039。 } else{ TimeDateString[0] = 39。 39。 TimeDateString[1] = 39。 39。 TimeDateString[2] = 39。 39。 TimeDateString[3] = 39。 39。 } TimeDateString[4] = 39。 /39。 if(hide_month2) {TimeDateString[5] = TimeMonth/10 + 39。 039。 TimeDateString[6] = TimeMonth%10 + 39。 039。 } else{ TimeDateString[5] = 39。 39。 TimeDateString[6] = 39。 39。 } TimeDateString[7] = 39。 /39。 if(hide_day2) {TimeDateString[8] = TimeDay/10 + 39。 039。 TimeDateString[9] = TimeDay%10 + 39。 039。 } else{TimeDateS。课程设计论文-基于单片机的电子万年历设计报告书
相关推荐
很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有: DS1302, DS12887, X1203 等都 可以满足高精度的要求。 本次设计采用 DS12887芯片 DS12887的性能特性 DS12887 为 DALLAS 公司生产的实时时钟芯片,除具有实时钟功能外,它还具有 114 字节的通用 RAM。 内藏锂电池
划方案,评定教学、科学研究 成果等有关学术事项。 第四十三条 高等学校通过以教师为主体的教职工代表大会等组织形式,依法保障教职工参与民主管理和监督,维护教职工合法权益。 第四十四条 高等学校的办学水平、教育质量,接受教育行政部门的监督和由其组织的评估。 贵州财经学院教师工作手册( 2020 年版) 11 第五章 高等学校教师和其他教育工作者 第四十五条
行,这个过程被叫做中断。 计数器采用软件编程来实现时钟,数码管显示采用动态显示。 成都学院(成都大学)课程设计报告 4 第 3 章 系统各单元电路分析 AT89C51 单片机 AT89C51 是一种带 4K 字节 FLASH 存储器的低电压、高性能 CMOS 的 8 位微处理器,俗称单片机。 AT89C51 是一种带 2K 字节闪存可编程可擦除只读存储器的单片机。
对成本是敏感的 � 所以目前占统治地位的软件还是最低级 现高智能 � 高效率 � 以及高可靠性 � 单片机 � 结果就会有天壤之别 � 只因为单片机的通过你编写的程序可以实 路一定是一块大 PCB板 � 但是如果要是用美国 70年代成功投放市场的系列 代开发的 74系列 � 或者 60年代的 CD4000系列这些纯硬件来搞定的话 � 电 有些则是花大力气也很难做到的。
的模拟信号。 START: A/D 转换启动信号,输入, 高电平有效。 在使用时,该信号通常与 ALE 信号连在一起,以便在锁存通道地址的同时启动 A/D 转换。 CLK:时钟脉冲输入端。 允许最高输入频率为 1280kHz,此时其转换时间为 75μs。 若时钟频率下降,时间随之增加。 如 CLK 选 640KHz,则转换时间为 100μs。 若 CLK 选 500KHz,则转换时间为
{ uint x,y。 for(x=z。 x0。 x) for(y=112。 y0。 y)。 } /*********************************************************** ******************DS1302 驱动程序 ******************