基于lcd1602电子时钟课程设计报告(编辑修改稿)内容摘要:
当前温度并延时 5秒 ;报警时按 K4 退出。 图 1(硬件原理图 ) 图 2( 软件原理图 ) 16 图 3( PCB) 程序: include include unsigned char code displaywele[]={ Wele To My Lcd Timer}。 //欢迎界面 unsigned char code displaywish[]={ Happy Every Day ^_^}。 //欢迎界面 unsigned char code overtemperature[]={OVERTEMPERATURE!}。 unsigned char code digit[]={0123456789}。 //数字代码 unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours, minutea,seconds,houra=12。 sbit SCLK=P1^0。 //DS1302时钟输入 sbit DATE=P1^1。 //DS1302数据输入 sbit REST=P1^2。 //DS1302复位端口 sbit SET=P1^4。 //DS1302设置模式选择位 sbit ADD=P1^5。 //增加 sbit RED=P1^6。 //减小 sbit CANL=P1^7。 sbit beep=P3^6。 //位定义 , 定义 fmp void delay1ms(int i)//1毫秒延时 { 17 int j,k。 while(i) for(j=76。 j1。 j)。 for(k=29。 k1。 k)。 } void delaynus(unsigned char n) //延时若干微秒 { unsigned char i。 for(i=0。 in。 i++)。 } /***********蜂鸣器模块 ************/ void dely500(void) { unsigned char i。 for(i=i0。 i) { _nop_()。 } } void baojing() //报警 { unsigned int j,h,y。 for(h=0。 h3。 h++) { for(y=0。 y10。 y++) { beep=~beep。 for(j=0。 j50。 j++)。 } dely500()。 } } /*******DS1302模块 *************/ void Write1302(unsigned char date)//向 1302写数据 { unsigned char i。 SCLK=0。 delaynus(2)。 for(i=0。 i8。 i++) { DATE=dateamp。 0x01。 SCLK=1。 delaynus(2)。 SCLK=0。 18 delaynus(2)。 date=1。 } } void WriteSet1302(unsigned char cmd,unsigned char date) //根据相应的命令输入相应的数据 { REST=0。 SCLK=0。 REST=1。 Write1302(cmd)。 delaynus(5)。 Write1302(date)。 SCLK=1。 REST=0。 } unsigned char Read1302(void) //读取 1302数据 { unsigned char i,date。 delaynus(2)。 for(i=0。 i8。 i++) { date=1。 if(DATE==1) date|=0x80。 SCLK=1。 delaynus(2)。 SCLK=0。 delaynus(2)。 } return date。 } unsigned char ReadSet1302(unsigned char cmd)//根据命令读取 1302相应的值 { unsigned char date。 REST=0。 SCLK=0。 REST=1。 Write1302(cmd)。 delaynus(2)。 date=Read1302()。 SCLK=1。 REST=0。 return date。 19 } void IntDS1302(void) //DS1302初始化 { unsigned char flag。 flag= ReadSet1302(0x81)。 if(flagamp。 0x80) { //判断时钟芯片是否关闭 WriteSet1302(0x8E,0x00)。 //根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,((0/10)4|(0%10)))。 //根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((0/10)4|(0%10)))。 //根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,((0/10)4|(0%10)))。 //根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,((0/10)4|(0%10)))。 //根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((0/10)4|(0%10)))。 //根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,((10/10)4|(10%10)))。 //根据写年寄存器命令字,写入年的初始值 WriteSet1302(0x90,0xa5)。 //打开充电功能 选择 2K电阻充电方式 WriteSet1302(0x8E,0x80)。 //根据写状态寄存器命令字,写入保护指令 } } /***************液晶显示模块 *****************/ sbit RS=P2^5。 sbit RW=P2^6。 sbit E=P2^7。 sbit BF=P0^7。 /*液晶忙检测 */ bit BusyTest(void) { bit result。 RS=0。 RW=1。 E=1。 _nop_()。 _nop_()。 _nop_()。 result=BF。 _nop_()。 _nop_()。 _nop_()。 E=0。 return result。 } /*写指令 */ void Write_(unsigned char mand) { while(BusyTest()!=0)。 RS=0。 20 RW=0。 E=0。 _nop_()。 _nop_()。 _nop_()。 P0=mand。 _nop_()。 _nop_()。 _nop_()。 E=1。 _nop_()。 _nop_()。 _nop_()。 E=0。 } /*写地址 */ void Write_Address(unsigned char address) { Write_(address|0x80)。 delay1ms(1)。 } /*写数据 */ void Write_Date(unsigned char date) { RS=1。 RW=0。 E=0。 _nop_()。 _nop_()。 _nop_()。 P0=date。 _nop_()。 _nop_()。 _nop_()。 E=1。 _nop_()。 _nop_()。 _nop_()。 E=0。 delay1ms(1)。 } /*初始化 */ void Lcd_Int(void) { Write_(0x38)。 21 delay1ms(1)。 Write_(0x38)。 delay1ms(1)。 Write_(0x06)。 delay1ms(1)。 Write_(0x0c)。 delay1ms(1)。 Write_(0x01)。 } void displaymainpart(void)//显示液晶主要部分 ( 不变化部分 ) { Write_Address(0x01)。 delay1ms(1)。 Write_Date(39。 D39。 )。 Write_Date(39。 A39。 )。 Write_Date(39。 T39。 )。 Write_Date(39。 E39。 )。 Write_Date(39。 :39。 )。 delay1ms(1)。 Write_Address(0x0A)。 delay1ms(1)。 Write_Date(39。 39。 )。 Write_Address(0x0D)。 Write_Date(39。 39。 )。 Write_Address(0x42)。 Write_Date(39。 T39。 )。 Write_Date(39。 I39。 )。 Write_Date(39。 M39。 )。 Write_Date(39。 E39。 )。 Write_Date(39。 :39。 )。 Write_Address(0x4A)。 Write_Date(39。 39。 )。 Write_Address(0x4D)。 Write_Date(39。 39。 )。 Write_Address(0x06)。 Write_Date(39。 239。 )。 Write_Date(39。 039。 )。 } void display_Second(unsigned char second) //在液晶上显示秒 { unsigned char i,j。 i=second/10。 j=second%10。 Write_Address(0x4E)。 Write_Date(digit[i])。 22 Write_Date(digit[j])。 delay1ms(1)。 } void display_Minute(unsigned char minute) //在液晶上显示分 { unsigned char i,j。 i=minute/10。 j=minute%10。 Write_Address(0x4B)。 Write_Date(digit[i])。 Write_Date(digit[j])。 delay1ms(1)。 } void display_Hour(unsigned char hour) //在液晶上显示时 { unsigned char i,j。 i=hour/10。 j=hour%10。 Write_Address(0x48)。 Write_Date(digit[i])。 Write_Date(digit[j])。 delay1ms(1)。 } void display_Day(unsigned char day) //在液晶上显示日 { unsigned char i,j。 i=day/10。 j=day%10。 Write_Address(0x0E)。 Write_Date(digit[i])。 Write_Date(digit[j])。 delay1ms(1)。 } void display_Month(unsigned char month) //在液晶上显示月 { unsigned char i,j。 i=month/10。 j=month%10。 Write_Address(0x0B)。 Write_Date(digit[i])。 Write_Date(digit[j])。 delay1ms(1)。 } void display_Year(unsigned char year) //在液晶上显示年。基于lcd1602电子时钟课程设计报告(编辑修改稿)
相关推荐
是模型 视图 控制器的缩写,该设计模式是存在于服务器表达层的一种模型,用于改变应用之间的耦合;它是一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能 被XXX大学本科生 毕业设计 (论文 ) 5 改进和个性化定制而不需要重新编写业务逻辑 MVC被独特的发展起来用于映射传统的输入
A_ID number 7 N 答案 ID,主键 Q_ID number 7 N 试题编号,外键( Q_ID) ANSWER varchar2 3000 N 答案 RIGHT number 1 Y 是否正确 (0 错 1对 ) ( 7)试卷 表 试卷 表会记录每一张试卷的 信息概要,表中的每一条记录对应一张试卷。 保存试卷编号、名称和科目编号。 其中科目 编号为外键,参照题库表。
了结合手势识别与增强现实技术的教育辅助系统的设想并进行了实现 [7]。 ( 2)利用 Kinect 深度传感器所获取的图像深度信息实现手部从背景中的分割 , 并通过在 Hu矩基础上加入 3 个表达式 , 使不变矩包含更多细节特征 , 对手势目标进行识别 , 最后把得到的识别结果转换成控制指令通过 AdHoc 网络传送给智能轮椅 ,实现运动控制 [8]。 ( 3)利用 Kinect 体感设备
如果以前存在同名的商品,则在原来的商品的基础上,对数量作出修改。 如果查不到填入的商品名,则在商品表中新建一条记录。 最后,在进货单表中生成相应的进货记录。 4 管理员信息管理模块 在管理员管理欢迎界面,点击“管理员信息管理页面”。 系统跳转至管理员信息管理界面。 在此界面上,可以实现对管理员信息的增删改,在此不再一一赘述。 5 交易信息查看模块 12 顾客每次在超市的消费都会有相应的记录。
个大 模块: 前台管理模块 、 后台管理 模块。 每个模块之间都不是相互独立的,他们对数据库的访问都是有一定的权限的,各个模块访问的是同一个数据库,只 是所访问的表不同而已。 每个模块的功能都是按照在实际调研中搜集的资料进行编排制作的 依据上述功能的分析, 前台管理模块:该模块有许多子模块功能,需要完成对用户的注册、查询功能,是 用户接触的第一个界面,有着很重要的作用。 用户留言模块
4 否 否 所属用户 fenlei_id int 4 否 否 所属分类 biaoti varchar 50 否 否 标题 neirong varchar 50 否 否 内容 guanjianzi varchar 50 否 否 关键字 yijian varchar 50 否 否 审核意见 zt int 4 否 否 当前状态 (5)管理员信息表主要记录的管理员的账号信息,包括用户名和密码,表结构如表