基于at89s52的电子万年历设计报告内容摘要:
uchar row,uchar col)。 void Set_place(uchar row,uchar col)。 void Play_nowtime()。 void key_set(uchar num,uchar row,uchar col )。 void alarm_time()。 void Play_alarmtime()。 void Time_pare()。 /******************************************************************/ /******************************************************************/ void delay1(int ms) { unsigned char y。 while(ms) { for(y = 0。 y y++) { _nop_()。 _nop_()。 _nop_()。 _nop_()。 } } } /******************************************************************/ /* 19 /*检查 LCD 忙状态 /*lcd_busy 为 1时,忙,等待。 lcdbusy 为 0时 ,闲,可写指令与数据。 /* /******************************************************************/ bit lcd_busy() { bit result。 LCD_RS = 0。 LCD_RW = 1。 LCD_EN = 1。 delayNOP()。 result = (bit)(P0amp。 0x80)。 LCD_EN = 0。 return(result)。 } /*********************************************************/ /* /*写指令数据到 LCD /*RS=L, RW=L, E=高脉冲, D0D7=指令码。 /* /*********************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy())。 LCD_RS = 0。 LCD_RW = 0。 LCD_EN = 0。 _nop_()。 _nop_()。 P0 = cmd。 delayNOP()。 LCD_EN = 1。 delayNOP()。 LCD_EN = 0。 } /********************************************************/ /* /*写显示数据到 LCD /*RS=H, RW=L, E=高脉冲 , D0D7=数据。 /* /********************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy())。 20 LCD_RS = 1。 LCD_RW = 0。 LCD_EN = 0。 P0 = dat。 delayNOP()。 LCD_EN = 1。 delayNOP()。 LCD_EN = 0。 } /********************************************************/ /* LCD 初始化设定 /********************************************************/ void init_lcd() { delay1(15)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 lcd_wcmd(0x38)。 //16*2 显示 , 5*7 点阵 , 8 位数据 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x0c)。 //显示开,关光标 delay1(5)。 lcd_wcmd(0x06)。 //移动光标 delay1(5)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 delay1(5)。 } /********************************************************/ // /********************************************************/ void delay() { uchar j。 for(j=j0。 j)。 } /*******************************************************/ /* /* 写字符串函数 /* 21 /*******************************************************/ void write_str(uchar addr,uchar *p) { uchar i=0。 lcd_wcmd(addr)。 while(p[i]!=39。 \039。 ) { lcd_wdat(p[i])。 i++。 } } /*******************************************************/ /* /* 设定显示位置 /* /*******************************************************/ void write_position(uchar row,uchar col) { uchar place。 if(row==1) { place=0x80+col1。 lcd_wcmd(place)。 } else { place=0xc0+col1。 lcd_wcmd(place)。 } } /*******************************************************/ /* /*自定义字符写入 CGRAM /* /*******************************************************/ void writetab() { unsigned char i。 lcd_wcmd(0x40)。 //写 CGRAM for (i = 0。 i 8。 i++) lcd_wdat(mytab[i])。 } /*******************************************************/ // 22 /*******************************************************/ void write_byte(uchar inbyte) { uchar i。 for(i=0。 i8。 i++) { sclk=0。 //写的时候低电平改变数据 if(inbyteamp。 0x01) io=1。 else io=0。 sclk=1。 //写的时候高电平,把数据写入 ds1302 _nop_()。 inbyte=inbyte1。 } } /********************************************************/ /********************************************************/ uchar read_byte() //sclk 的下跳沿读数据 { uchar i,temp=0。 io=1。 //设置为输入口 for(i=0。 i7。 i++) { sclk=0。 if(io==1) temp=temp|0x80。 else temp=tempamp。 0x7f。 sclk=1。 //产生 下跳沿 temp=temp1。 } return (temp)。 } /********************************************************/ // 往 ds1302 的某个地址写入数据 /********************************************************/ void write_ds1302(uchar cmd,uchar indata) { sclk=0。 reset=1。 23 write_byte(cmd)。 write_byte(indata)。 sclk=0。 reset=0。 } /********************************************************/ // 读 ds1302 某地址的的数据 /**。基于at89s52的电子万年历设计报告
相关推荐
显示组件是播放器系统提供给使用者各种有用的信息,而控制组件则刚好相反,它可以看作是使用者提供给播放器系统的各种有用的信息,用来指示系统是否工作及如何工作。 同样,这些控制组件又分为了多个部分,其中各个按钮都是使用的 Command控件,而两个控制条则是分别使用了两个 Label控件,通过其中一个 Label控件位置的改变来模拟控制条的滑动。 各控制组件如表 32所示。 /暂停按钮设计
_LOGIC。 SIGNAL CQA1,CQA2,CQA3,CQB1,CQB2,CQB3:STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN U1: CNT10 PORT MAP (EN=E,RST=RST,CLK=A,COUT=CA1,CQ=CQA1)。 U2: CNT10 PORT MAP (EN=E,RST=RST,CLK=CA1,COUT=CA2,CQ=CQA2)。
.................................................... 9 MAX7219 简介 .....................................................................................11 MAX7219 内部寄存器和工作模式 ..........................
89S52 华科学院本科毕业设计(论文) 14 3. 4 各部分电路原理 DAC0832 芯片原理 由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有 8 位分辨率的数模转换器DAC0832。 DAC0832 主要由 8 位输入寄存器、 8 位 DAC 寄存器、 8 位 D/A 转换器以及输入控制电路四部分组成。
4 第二章 总体设计方案 总体方框图 根据系统设计的 任务 要求和设计思路,确定该 系统的设计 方框 图。 如图 所示。 硬件电路主要由 MCU 微处理控制器单元、 DS1302 时钟电路、复位电路、晶振电路、 液晶 显示模块 、 电源模块 构成。 图 系统 方框图 总体 方案工作原理 本设计 主要由基于 AT89S52 芯片 构成的单片机最小系统、日历时钟芯片 DS1302 及其外围电路、
时时间长,稳定性能也高。 从上面方案上选择,我选择最后一个方案。 最终方案 1. Atmel 公司的 AT89C52 单片机作为主控制器 2. 采用光敏电阻组成光敏探测器 3. 采用超声波传感器组成超声波避障器 4. 采用应变式传感器来作垃圾桶检测装置 5. 采用步进电机作为该系统的驱动电机 6. 采用专用芯片 L298N 作为电机驱动芯片 7. 采用 静态扫描显示,并用七段译码芯 片