燕山大学里仁学院仪表专业STM8S105S4校内实习程序.docx
《燕山大学里仁学院仪表专业STM8S105S4校内实习程序.docx》由会员分享,可在线阅读,更多相关《燕山大学里仁学院仪表专业STM8S105S4校内实习程序.docx(13页珍藏版)》请在冰豆网上搜索。
燕山大学里仁学院仪表专业STM8S105S4校内实习程序
燕山大学(里仁学院)仪表专业STM8S105S4校内实习程序
注:
1、由于本人水平有限,只能整理出姓名、万年历、温度三者,湿度未能如愿,望我校后起之秀加以补全方便学弟学妹,望理解。
2、运行此程序需图片中的附加程序,请在STVISUALDEVELOP窗口下自行添加。
/*STM8控制程序:
S1**********PA1
S2**********PA2
S3**********PA4
S4**********PA5
HS1101**********PD4
MF25***********PE6
四个按键,分别为左移,右移,确认,返回。
实现四种功能,分别为姓名,时间,温度,湿度。
*/
#include"stm8s_gpio.h"
#include"stm8s_adc1.h"
#include"lcd162a.h"
#include"stm8s_exti.h"
#include"DS1302.h"
#include"stm8s_clk.h"
#include"stm8s_tim2.h"
voiddelay(u8i)//延时
{
while(i--);
}
voidmain(void)
{
u8*p1="Hello,world.YSU";
u8*p2="Name";
u8*p3="Date";
u8*p4="Temp";
u8*p5="Humi";
u8*p6="Name:
";
u8*p7="SuSheng";
u8*p8="Humidity:
";
u8*p9="Temperature:
";
u8a=1;
u8b=1;
u16r;
u8time;
u8temp;
u8i,add;
u16t1,t2,f;
u16t=0;
u8bai,shi,ge;
u8wan1,qian1,bai1,shi1,ge1;
u16Conversion_Value1=0;
u16Conversion_Value=0;
//依次为年:
月,日,星期几,小时,分
Set1302(11,2,28,1,23,59);
TIM2_ICInit(TIM2_CHANNEL_1,TIM2_ICPOLARITY_RISING,TIM2_ICSELECTION_DIRECTTI,TIM2_ICPSC_DIV1,0);
TIM2_Cmd(ENABLE);//使能TIM2计数
TIM2_ClearFlag(TIM2_FLAG_CC1);
GPIO_Init(GPIOC,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOB,(GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_0),GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOA,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_FAST);
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,ADC1_CHANNEL_9,ADC1_PRESSEL_FCPU_D18,ADC1_EXTTRIG_TIM,DISABLE,ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL9,DISABLE);
ADC1_StartConversion();
lcd162a_Reset();
lcd162a_cls();
lcd162a_ePutstr(1,1,p1);
delay_ms(240);
lcd162a_cls();
while
(1)
{
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_1)==0)//左移
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_1)==0);
{
if((a==1)&(b==1))b=2;
elseif((a==1)&(b==2))b=1;
if(a==1)a=8;
elseif(a==8)a=1;
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
}
}
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_2)==0)//右移
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_2)==0);
{
if((a==8)&(b==1))b=2;
elseif((a==8)&(b==2))b=1;
if(a==1)a=8;
elseif(a==8)a=1;
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
}
}
lcd162a_DispOneChar(b,a,239);//显示
lcd162a_ePutstr(1,3,p2);
lcd162a_ePutstr(1,10,p3);
lcd162a_ePutstr(2,3,p4);
lcd162a_ePutstr(2,10,p5);
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_4)==0)//姓名
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_4)==0);
{
if((a==1)&(b==1))
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
if((a==1)&(b==1))
{lcd162a_ePutstr(1,1,p6);
lcd162a_ePutstr(2,5,p7);
}
while
(1)
{
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0)//姓名返回
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0);
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
break;
}
}
}
}
if((a==8)&(b==1))//万年历
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
while
(1)
{
lcd162a_DispOneChar(1,4,'2');
lcd162a_DispOneChar(1,5,'0');
//年
time=Read1302(YEAR);
lcd162a_DispOneChar(1,6,48+(u8)(time/10));
lcd162a_DispOneChar(1,7,48+(u8)(time%10));
lcd162a_DispOneChar(1,8,45);//"-"
//月
time=Read1302(MONTH);
lcd162a_DispOneChar(1,9,48+(u8)(time/10));
lcd162a_DispOneChar(1,10,48+(u8)(time%10));
lcd162a_DispOneChar(1,11,45);//"-"
//天
time=Read1302(DATE);
lcd162a_DispOneChar(1,12,48+(u8)(time/10));
lcd162a_DispOneChar(1,13,48+(u8)(time%10));
//小时
time=Read1302(HOUR);
lcd162a_DispOneChar(2,4,48+(u8)(time/10));
lcd162a_DispOneChar(2,5,48+(u8)(time%10));
lcd162a_DispOneChar(2,6,58);//":
"
//分
time=Read1302(MINUTE);
lcd162a_DispOneChar(2,7,48+(u8)(time/10));
lcd162a_DispOneChar(2,8,48+(u8)(time%10));
lcd162a_DispOneChar(2,9,58);//":
"
//秒
time=Read1302(SECOND);
lcd162a_DispOneChar(2,10,48+(u8)(time/10));
lcd162a_DispOneChar(2,11,48+(u8)(time%10));
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0)//万年历返回
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0);
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
break;
}
}
}
}
if((a==8)&(b==2))
{
while((TIM2->SR1&TIM2_FLAG_CC1)!
=TIM2_FLAG_CC1);
t1=TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
while((TIM2->SR1&TIM2_FLAG_CC1)!
=TIM2_FLAG_CC1);
t2=TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
t=t2-t1;
Conversion_Value1=2000000/t;
Conversion_Value1=(100-(Conversion_Value1-(u32)6033)/(u16)13);
bai=(Conversion_Value1%1000)/100;
shi=(Conversion_Value1%100)/10;
ge=(Conversion_Value1%10);
lcd162a_DispOneChar(2,7,bai+48);
lcd162a_DispOneChar(2,8,shi+48);
lcd162a_DispOneChar(2,9,ge+48);
lcd162a_DispOneChar(2,10,37);
lcd162a_cls();
while
(1)
{
TIM2_ClearFlag(TIM2_FLAG_CC1);
while((TIM2->SR1&TIM2_FLAG_CC1)!
=TIM2_FLAG_CC1);
//GetCCR1value
t1=TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
while((TIM2->SR1&TIM2_FLAG_CC1)!
=TIM2_FLAG_CC1);
//GetCCR1value
t2=TIM2_GetCapture1();
TIM2_ClearFlag(TIM2_FLAG_CC1);
t=t2-t1;
Conversion_Value1=2000000/t;
Conversion_Value1=(100-(Conversion_Value1-(u32)6033)/(u16)13);
lcd162a_ePutstr(1,1,p8);
bai=(Conversion_Value1%1000)/100;
shi=(Conversion_Value1%100)/10;
ge=(Conversion_Value1%10);
lcd162a_DispOneChar(2,7,bai+48);
lcd162a_DispOneChar(2,8,shi+48);
lcd162a_DispOneChar(2,9,ge+48);
lcd162a_DispOneChar(2,10,37);
delay_ms(200);//lcd162c中有定义
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0)//万年历返回
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0);
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
break;
}
}
}
}
if((a==1)&(b==2))
{
u8i=10;
unsignedlongt;
lcd162a_cls();
while
(1)
{
Conversion_Value=ADC1_GetConversionValue();
Conversion_Value=(((u32)1024*(u32)10000)/Conversion_Value-10000);
if((Conversion_Value>=(u32)4160)&(Conversion_Value<(u32)4912))
Conversion_Value=((u32)77538-((u32)6645*Conversion_Value)/1000);
if((Conversion_Value>=(u32)4912)&(Conversion_Value<(u32)6912))
Conversion_Value=((u32)68637-((u32)4915*Conversion_Value)/1000);
if((Conversion_Value>=(u32)6912)&(Conversion_Value<(u32)8944))
Conversion_Value=((u32)58497-((u32)3429*Conversion_Value)/1000);
if((Conversion_Value>=(u32)8944)&(Conversion_Value<(u32)11637))
Conversion_Value=((u32)50463-((u32)2546*Conversion_Value)/1000);
if((Conversion_Value>=(u32)11637)&(Conversion_Value<(u32)12094))
Conversion_Value=((u32)40599-((u32)1740*Conversion_Value)/1000);
if((Conversion_Value>=(u32)12094)&(Conversion_Value<(u32)27372))
Conversion_Value=((u32)25770-((u32)939*Conversion_Value)/1000);
wan1=(Conversion_Value/10000);
qian1=(Conversion_Value%10000)/1000;
bai1=(Conversion_Value%1000)/100;
shi1=(Conversion_Value%100)/10;
ge1=(Conversion_Value%10);
//r=(100*(1024-t)/t)*100;
lcd162a_ePutstr(1,1,p9);
lcd162a_DispOneChar(2,4,wan1+48);
lcd162a_DispOneChar(2,5,qian1+48);
lcd162a_DispOneChar(2,6,46);
lcd162a_DispOneChar(2,7,bai1+48);
lcd162a_DispOneChar(2,8,shi1+48);
lcd162a_DispOneChar(2,9,ge1+48);
lcd162a_DispOneChar(2,10,67);
delay_ms(200);//lcd162c中有定义
if((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0)
{
while((GPIO_ReadInputData(GPIOA)&GPIO_PIN_5)==0);
{
lcd162a_Reset();
lcd162a_cls();
delay_ms
(1);
break;
}
}
}
}
}
}
}
}