我想建立个网站数据怎么办,会展网站建设,宁波建站平台,重庆网站模板建站公司一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶12864显示。 3、按键年月日时分秒#xff0c;两路闹钟。 二、硬件设计 原理图如下#xff1a;
三、单片机软件设计 1、首先是系统初始化 uchar clock_time[6] {0X00,0X59,0X23,0X09,0X…一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302采集年月日时分秒送到液晶12864显示。 3、按键年月日时分秒两路闹钟。 二、硬件设计 原理图如下
三、单片机软件设计 1、首先是系统初始化 uchar clock_time[6] {0X00,0X59,0X23,0X09,0X04,0X11}; //定义时间变量 秒 分 时 日 月 年 uchar alarm_time[2] { 10, 6}; //闹钟设置 alarm_time[0]: 分钟 alarm_time[1] :小时 uchar alarm_time2[2] { 15, 7}; Lcd_Initial(); //LCD初始化 Clock_Fresh( clock_time ); //我把时间刷新放在这里proteus会调用当前系统时间 Clock_Initial( clock_time ); //时钟初试化
/***********************中断初始化***************************/
EA 1; //开总中断
ET0 1; //Timer0 开中断
TMOD 0x01; //Timer0 工作方式 1
TH0 0x3c;
TL0 0XB0; //延时 50 ms2、液晶显示程序
void showXY(uchar row,uchar col,uchar x,uchar y,uchar tab){ uchar i,j; bit right; if(col64){right0;} else {col-64;right1;} for(i0;iy;i){ if(right)cs11,cs20; else cs10,cs21; Lcd_Write_Command(addX0rowi); Lcd_Write_Command(addY0col); for(j0;jx;j){ if(colj64)Lcd_Write_Byte(tab[ixj]); else if(right0) { cs11,cs20; Lcd_Write_Command(addX0rowi); Lcd_Write_Command(addY0(colj-64)); Lcd_Write_Byte(tab[ixj]); } } } } / 返回一个8*16字符索引位置 / uchar enN(uchar s){ uchar i; for(i0;zm8x16_index[i]!0;i) if(zm8x16_index[i]s[0])break; return i; } / 返回一个1616字符索引位置 */ uchar cnN(uchar *s){ uchar i; for(i0;zm16x16_index[i]!0;i2) if(zm16x16_index[i]szm16x16_index[i1](s1))break ; return i/2; } /* 显示中英文字符串 / void showStr(uchar row,uchar col,uchar s) { uchar i; for(i0;s[i]!0;i){ if(s[i]0x80){ showXY(row,col,8,2,zm8x16_Table[enN(s[i])]); col8; }else{ showXY(row,col,16,2,zm16x16_Table[cnN(s[i])]); col16;i1; } if(col120) { col0; row2; } } } 3、按键程序 /******************************************************************************************
函数名称Key_Idle()功 能键盘松开入口参数无出口参数无 *********************************************************************************************/ void Key_Idle() { while( ( P1 0x0f ) ! 0x0f ); }
/******************************************************************************************** 函数名称Key_Scan() 功 能键盘扫描 入口参数无 出口参数键值 *********************************************************************************************/ uchar Key_Scan() { if( ( P1 0x0f ) ! 0x0f ) //判断按键 { Delay(10); //消除抖动 // Lcd_Initial(); if( ( P1 0x0f ) ! 0x0f ) { switch ( P1 0x0f ) //将按键码转换成键值 { case 0x0e: return up_array; case 0x0d: return down_array; case 0x0b: return clear_array; case 0x07: return function_array; default : return null; } } } return null; } 4、核心算法程序 void main( void ) { uchar clock_time[6] {0X00,0X59,0X23,0X09,0X04,0X11}; //定义时间变量 秒 分 时 日 月 年 uchar alarm_time[2] { 10, 6}; //闹钟设置 alarm_time[0]: 分钟 alarm_time[1] :小时 uchar alarm_time2[2] { 15, 7}; Lcd_Initial(); //LCD初始化 Clock_Fresh( clock_time ); //我把时间刷新放在这里proteus会调用当前系统时间 Clock_Initial( clock_time ); //时钟初试化 /中断初始化****/ EA 1; //开总中断 ET0 1; //Timer0 开中断 TMOD 0x01; //Timer0 工作方式 1 TH0 0x3c; TL0 0XB0; //延时 50 ms while( 1 ) { {Clock_Fresh( clock_time ); //时间刷新Lcd_Clock( clock_time ); //时间显示 Calendar_Convert( 0 , clock_time );Week_Convert( 0, clock_time );//闹钟1报警if( * alarm_time HexNum_Convert(* ( clock_time 1 ) )) //分钟相吻合if( * ( alarm_time 1 ) HexNum_Convert(*( clock_time 2 )) ) //小时相吻合{ if(HexNum_Convert(*( clock_time )) 2) TR0 1; //启动Timer0}//闹钟2报警if( * alarm_time2 HexNum_Convert(* ( clock_time 1 ) )) //分钟相吻合if( * ( alarm_time2 1 ) HexNum_Convert(*( clock_time 2 )) ) //小时相吻合{if(HexNum_Convert(*( clock_time )) 2) TR0 1; //启动Timer0}} switch( Key_Scan() ){case up_array: {//Lcd_Initial();Key_Idle();}break; case down_array: {// Lcd_Initial();Key_Idle();}break; case clear_array: { // Lcd_Initial();Key_Idle();} break;case function_array:{//Lcd_Initial();Key_Function( clock_time, alarm_time ,alarm_time2);}break;case null: break;}} } 四、 proteus仿真设计 Proteus软件是一款应用比较广泛的工具它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况这样就可以通过软件仿真来验证我们设计的方案有没有问题如果有问题可以重新选择器件连接器件直到达到我们设定的目的避免我们搭建实物的时候如果当初选择的方案有问题我们器件都已经焊接好了再去卸载下去再去焊接新的方案的器件测试这样会浪费人力和物力也给开发者带来一定困惑Proteus仿真软件就很好的解决这个问题我们在设计之初就使用该软件进行模拟仿真测试选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸焊接实物调试最终完成本设计的作品。