一、配置不同
1、三星2017:号Veyron,延续翻盖式双屏设计,配备42英寸Super AMOLED屏幕,分辨率达到720p级别,搭载高通骁龙820处理器,前置500万+1200万像素后置摄像头。
2、三星2017+:调整为2018,骁龙821处理器、4GB内存、64GB存储、1200万像素后置和500万像素前置摄像头、2300mAh电池、双卡双待、NFC。
二、机身不同
1、三星2017:三星W2017采用内外双屏以及保留T9物理按键的设计,因此其机身比较厚,达到了158mm。
2、三星2017+:机身背部加入了指纹识别。手机转轴部分采用锌合金一体成型双轴铰链,导航键部分采用星芒纹饰设计,并经过126道激光雕刻。
三、内外屏不同
1、三星2017:内外屏采用的都是42英寸1080P分辨率的Super AMOLED屏幕,而前置摄像头和听筒均设置在内屏的顶部。
2、三星2017+:内外配备两块42英寸1080P屏幕。其中,外触屏和背板均采用康宁第五代大猩猩玻璃。
-三星W2017
-心系天下三星W2018
我以前倒是做过,不过程序还有点问题,调时间的时候容易过界,但正常走时候就正常了。开发环境用的IAR,单片机用f149,显示用的1602的四线模式。
你自己看着改程序吧,其实我也是51上移植过去的。
悲剧了,帖不下了我帖在我博客里了啊,自己去找吧
主程序
__________________________分隔线____________________________________
#include <msp430x14xh>
#include "ds1302h"
#include "LCD1602x4_mpsh"
#define DS1302_SECOND 0x81 //时钟芯片的寄存器位置,存放时间
#define DS1302_MINUTE 0x83
#define DS1302_HOUR 0x85
#define DS1302_WEEK 0x8b
#define DS1302_DAY 0x87
#define DS1302_MONTH 0x89
#define DS1302_YEAR 0x8d
unsigned char DateString[11],TimeString[9],week_value[2],TempBuffer[7]; //
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;
char done,count,temp,flag,up_flag,down_flag;
//unsigned int temp_value=0,temp_max=0;temp_min=0; //温度值
void DateToStr(void) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]
{ unsigned char Year,Month,Day,Week;
Year=rtc_getyear();
Month=rtc_getmon();
Day=rtc_getdate();
Week=rtc_getday();
if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22
{
DateString[0] = '2';
DateString[1] = '0';
DateString[2] = Year/10 + '0';
DateString[3] = Year%10 + '0';
}
else
{
DateString[0] = ' ';
DateString[1] = ' ';
DateString[2] = ' ';
DateString[3] = ' ';
}
DateString[4] = '/';
if(hide_month<2)
{
DateString[5] = Month/10 + '0';
DateString[6] = Month%10 + '0';
}
else
{
DateString[5] = ' ';
DateString[6] = ' ';
}
DateString[7] = '/';
if(hide_day<2)
{
DateString[8] = Day/10 + '0';
DateString[9] = Day%10 + '0';
}
else
{
DateString[8] = ' ';
DateString[9] = ' ';
}
if(hide_week<2)
{
week_value[0] = Week%10 + '0'; //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示
}
else
{
week_value[0] = ' ';
}
week_value[1] = '\0';
DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符
}
void TimeToStr(void) //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];
{ unsigned char Hour,Minute,Second;
Hour=rtc_gethour();
Minute=rtc_getmin();
Second=rtc_getsec();
if(hide_hour<2)
{
TimeString[0] = Hour/10 + '0';
TimeString[1] = Hour%10 + '0';
}
else
{
TimeString[0] = ' ';
TimeString[1] = ' ';
}
TimeString[2] = ':';
if(hide_min<2)
{
TimeString[3] = Minute/10 + '0';
TimeString[4] = Minute%10 + '0';
}
else
{
TimeString[3] = ' ';
TimeString[4] = ' ';
}
TimeString[5] = ':';
if(hide_sec<2)
{
TimeString[6] = Second/10 + '0';
TimeString[7] = Second%10 + '0';
}
else
{
TimeString[6] = ' ';
TimeString[7] = ' ';
}
DateString[8] = '\0';
}
void show_time() //液晶显示程序
{
TimeToStr(); //时间数据转换液晶字符
DateToStr(); //日期数据转换液晶字符
// ReadTemp(); //开启温度采集程序
// temp_to_str(); //温度数据转换成液晶字符
LCD_PutStr(TempBuffer,25); //显示温度
LCD_PutStr(DateString,0); //显示日期
LCD_PutStr(week_value,15); //显示星期
LCD_PutStr(" Week",10); //在液晶上显示 字母 week
LCD_PutStr(TimeString,16); //显示时间
}
////////////////////////////////////////////////////////////////////////////
void outkey() //跳出调整模式,返回默认显示
{ unsigned char Second;
if (!(P1IN&BIT0))
{
count=0;
hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
Second=dataread(DS1302_SECOND);
datawrite(0x8e,0x00); //写入允许
datawrite(0x80,Second&0x7f);
datawrite(0x8E,0x80); //禁止写入
done=0;//temp_max=0;sund=1;
while(!(P1IN&BIT0));
delay_nms(2);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Upkey()//升序按键
{
if(!(P1IN&BIT1))
{
switch(count)
{case 1:
temp=dataread(DS1302_SECOND); //读取秒数
temp=temp+1; //秒数加1
up_flag=1; //数据调整后更新标志
if((temp&0x7f)>0x59) //超过59秒,清零
temp=0;
break;
case 2:
temp=dataread(DS1302_MINUTE); //读取分数
temp=temp+1; //分数加1
up_flag=1;
if(temp>0x59) //超过59分,清零
temp=0;
break;
case 3:
temp=dataread(DS1302_HOUR); //读取小时数
temp=temp+1; //小时数加1
up_flag=1;
if(temp>0x23) //超过23小时,清零
temp=0;
break;
case 4:
temp=dataread(DS1302_WEEK); //读取星期数
temp=temp+1; //星期数加1
up_flag=1;
if(temp>0x7)
temp=1;
break;
case 5:
temp=dataread(DS1302_DAY); //读取日数
temp=temp+1; //日数加1
up_flag=1;
if(temp>0x31)
temp=1;
break;
case 6:
temp=dataread(DS1302_MONTH); //读取月数
temp=temp+1; //月数加1
up_flag=1;
if(temp>0x12)
temp=1;
break;
case 7:
temp=dataread(DS1302_YEAR); //读取年数
temp=temp+1; //年数加1
up_flag=1;
if(temp>0x99)
temp=0;
break;
default:break;
}
while(!(P1IN&BIT1));
delay_nms(2);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Downkey()//降序按键
{
if(!(P1IN&BIT2))
{
switch(count)
{case 1:
temp=dataread(DS1302_SECOND); //读取秒数
temp=temp-1; //秒数减1
down_flag=1; //数据调整后更新标志
if((temp&0x7f)>0x59) //小于0秒,返回59秒
temp=0x59;
break;
case 2:
temp=dataread(DS1302_MINUTE); //读取分数
temp=temp-1; //分数减1
down_flag=1;
if(temp>0x59)
temp=0x59; //小于0秒,返回59秒
break;
case 3:
temp=dataread(DS1302_HOUR); //读取小时数
temp=temp-1; //小时数减1
down_flag=1;
if(temp==0x00)
temp=0x23;
break;
case 4:
temp=dataread(DS1302_WEEK); //读取星期数
temp=temp-1; //星期数减1
down_flag=1;
if(temp==0x00)
temp=0x07;
break;
case 5:
temp=dataread(DS1302_DAY); //读取日数
temp=temp-1; //日数减1
down_flag=1;
if(temp==0x00)
temp=0x31;
break;
case 6:
temp=dataread(DS1302_MONTH); //读取月数
temp=temp-1; //月数减1
down_flag=1;
if(temp==0x00)
temp=0x12;
break;
case 7:
temp=dataread(DS1302_YEAR); //读取年数
temp=temp-1; //年数减1
down_flag=1;
if(temp>0x99)
temp=0x99;
break;
default:break;
}
while(!(P1IN&BIT2));
delay_nms(2);
}
}
void Setkey()//模式选择按键
{
if(!(P1IN&BIT3))
{
count=count+1; //Setkey按一次,count就加1
done=1; //进入调整模式
while(!(P1IN&BIT3));
delay_nms(2);
}
}
void keydone()//按键功能执行
{ unsigned char Second;
if(flag==0) //关闭时钟,停止计时
{ datawrite(0x8e,0x00); //写入允许
temp=dataread(DS1302_SECOND);
datawrite(0x80,temp|0x80);
datawrite(0x8e,0x80); //禁止写入
flag=1;
}
Setkey(); //扫描模式切换按键
switch(count)
{
case 1:do //count=2,调整秒
{
outkey(); //扫描跳出按钮
Upkey(); //扫描加按钮
Downkey(); //扫描减按钮
if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x80,temp|0x80); //写入新的秒数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_sec++; //位闪计数
if(hide_sec>3)
hide_sec=0;
show_time(); //液晶显示数据
}while(count==2);break;
case 2:do //count=3,调整分
{
hide_sec=0;
outkey();
Upkey();
Downkey();
if(temp>0x60)
temp=0;
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x82,temp); //写入新的分数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_min++;
if(hide_min>3)
hide_min=0;
show_time();
}while(count==3);break;
case 3:do //count=4,调整小时
{
hide_min=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x84,temp); //写入新的小时数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_hour++;
if(hide_hour>3)
hide_hour=0;
show_time();
}while(count==4);break;
case 4:do //count=5,调整星期
{
hide_hour=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x8a,temp); //写入新的星期数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_week++;
if(hide_week>3)
hide_week=0;
show_time();
}while(count==5);break;
case 5:do //count=6,调整日
{
hide_week=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x86,temp); //写入新的日数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_day++;
if(hide_day>3)
hide_day=0;
show_time();
}while(count==6);break;
case 6:do //count=7,调整月
{
hide_day=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x88,temp); //写入新的月数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_month++;
if(hide_month>3)
hide_month=0;
show_time();
}while(count==7);break;
case 7:do //count=8,调整年
{
hide_month=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
datawrite(0x8e,0x00); //写入允许
datawrite(0x8c,temp); //写入新的年数
datawrite(0x8e,0x80); //禁止写入
up_flag=0;
down_flag=0;
}
hide_year++;
if(hide_year>3)
hide_year=0;
show_time();
}while(count==8);break;
case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
Second=dataread(0x80);
datawrite(0x8e,0x00); //写入允许
datawrite(0x80,Second&0x7f);
datawrite(0x8E,0x80); //禁止写入
done=0; //temp_max=0;sund=1;
break; //count=7,开启中断,标志位置0并退出
default:break;
}
}
////////////////////////////////////////////////////////////////////////////
void rtcinit ()
{
rtc_wp(0);
rtc_stop(0);
rtc_charger(1,1);
}
void sysinit ()
{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P4OUT = 0xff;
P4DIR = 0xff;
P5OUT = 0x0f;
P5DIR = 0xf0;
P6OUT = 0xfc;
P6DIR = 0xfc;
}
void main ()
{ unsigned char temp;
sysinit ();
rtcinit ();
LCD_init(); //液晶初始化
_EINT();
while (1)
{
while(done==1)
keydone(); //进入调整模式
while(done==0)
{
temp=rtc_getsec();
delay_nms(10);
if(temp!=rtc_getsec())
show_time(); //液晶显示数据
flag=0;
Setkey(); //扫描各功能键
}
}
}
定时器虽然大家在平时生活中都有听说过,但是可能不是经常接触,所以对其的了解不是很多,所以今天为了大家更好的认识定时器,就跟大家说说定时器怎么设置时间以及定时器的使用注意事项,一起来看看。
定时器虽然大家在平时生活中都有听说过,但是可能不是经常接触,所以对其的了解不是很多,所以今天为了大家更好的认识定时器,就跟大家说说定时器怎么设置时间以及定时器的使用注意事项,一起来看看。
一、定时器怎么设置时间
1、电子定时器的当前时间调整方式简单,需要通过组合按键的方式进行操作(注意:默认状态下星期、钟头、分3个按键是屏蔽的,单独按下之后是没有任何反应的,需要先按下时钟键,再按星期、钟头、分中的任意键,这也是一种防止不小心误操作的方式,所以对3个按键采取了屏蔽)。
2、调整星期:先按下时钟键,再按下星期键,调整到当前星期值。(每按1次增加1天,长按可快速调整。)
3、调整钟头:先按下时钟键,再按下钟头键,调整到当前钟头值。(每按1次增加1钟头,长按可快速调整。)
4、调整分:先按下时钟键,再按下分键,调整到当前分值。(每按1次增加1分,长按可快速调整。)
5、调整夏令时:定时器自带有夏令时功能可以选用,默认情况下不开启。操作方法:按住时钟键3秒钟,当前时间增加1钟头,液晶屏显示“夏令时”字样,进入夏令时功能;再按时钟键3秒钟,当前时间减少1钟头,液晶屏取消显示“夏令时”字样,退出夏令时功能。
二、定时器的使用注意事项
在FC里使用像T0、T1这样的定时器,如果多次调用就有问题了,一个定时器不能同时用于两台设备!解决的方法是在FC中创建一个参数类型为Timer(定时器)的输入参数,在调用时为该参数指定不同的实参,例如设备A的实参为T0、设备B的实参为T1等等。
西门子结构化编程的精髓和相对其他PLC(包括S7-200)的就在于FB、FC的可移植性和可重用性。其基本规则是在FB、FC内部不使用任何全局变量,全部使用局部变量。这样的FB、FC的内部程序不作任何修改,就可以在同一项目中多次调用,或者将它们移植到其他项目中去。FC、FB众多的参数类型能实现这一要求。编程人员在工作中积累了大量的这样的FC、FB后,就可以像搭积木一样迅速地创建出满足不同客户要求的类似系统的程序。
作为编程人员应该养成不在FB、FC内部使用全局变量的习惯!
好了,关于定时器怎么设置时间以及定时器的使用注意事项的全部知识就跟大家介绍到这里了,希望以上的文章可以帮助到大家,大家在选购的时候,不要只看价格哦,要注意质量,如果还想了解相关的知识,可以继续关注我们的网站哦。
欢迎分享,转载请注明来源:品搜搜测评网