久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于SHT10+MSP430F449設(shè)計(jì)的電子鐘和濕溫度計(jì)
[打印本頁]
作者:
ZLS123666
時(shí)間:
2018-7-18 16:52
標(biāo)題:
基于SHT10+MSP430F449設(shè)計(jì)的電子鐘和濕溫度計(jì)
這是我基于MSP430F449設(shè)計(jì)的電子鐘和濕溫度計(jì)
0.png
(41.47 KB, 下載次數(shù): 66)
下載附件
2018-7-19 00:33 上傳
單片機(jī)源程序如下:
#include <time.h>
#include "io430.h"
#include "display.h"
#include "rtc.h"
#include "sht10.h"
#include "key.h"
void KeyProcess(void);
void AdjustDateTime(void);
enum __dis_state{DATETIME, TEMPERATURE, HUMIDITY, VOLTAGE};
enum __bl_state{OFF, ON};
enum __adj_state{ADJ_YEAR, ADJ_MON, ADJ_DAY, ADJ_HOUR, ADJ_MIN, ADJ_SEC};
struct tm datetime;
float temp, humi;
int display_state = DATETIME;
void ReverseBacklight(void)
{
static int backlight_state = OFF;
//P3.7, output HIGH --> ON, LOW --> OFF
P3SEL &= ~BIT7;
P3DIR |= BIT7;
if (backlight_state == OFF)
{
backlight_state = ON;
P3OUT &= ~BIT7;
}
else
{
backlight_state = OFF;
P3OUT |= BIT7;
}
}
void InitClock(void)
{
FLL_CTL0 &= 0x0F;
FLL_CTL1 = XT2OFF;
SCFI0 = FN_2;
SCFQCTL = 121; //DOC ~ 4M
}
void lpm_delay(unsigned char second)
{
int i;
for(i=0; i<second; i++)
{
if (KeyIsPress())
return;
WDTCTL = WDT_ADLY_1000;
LPM3;
}
WDTCTL = WDTPW + WDTHOLD;
}
int GetVoltage(void)
{
int volt;
int i, sample=0;
//Enable Internal Voltage Reference
ADC12CTL0 = SHT1_8 + REF2_5V + REFON + ADC12ON;
ADC12CTL1 = SHP;
ADC12MCTL0 = 0x1B;
ADC12CTL0 |= ENC;
__delay_cycles(100); //wait for Vref stable;
for(i=0; i<8; i++)
{
ADC12CTL0 |= ADC12SC;
while(!(ADC12IFG & BIT0));
sample += ADC12MEM0;
}
ADC12CTL0 = 0;
sample >>= 3;
volt = (int)(sample * 1.221); //*1.221
return volt;
}
void InitUnusedPin(void)
{
//P6.0 ~ P6.7
//P1.0 ~ P1.6
//P2.4 ~ P2.5
//P3.2 ~ P3.6
//P4.0 ~ P4.7 except P4.3
P6DIR |= 0xFF;
P1DIR |= 0x7F;
P2DIR |= BIT4+BIT5;
P3DIR |= BIT2+BIT3+BIT4+BIT5+BIT6;
P4DIR |= 0xF7;
P6OUT &= 0;
P1OUT &= 0x80;
P2OUT &= ~(BIT4+BIT5);
P3OUT &= 0x83;
P4OUT &= 0x08;
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitUnusedPin();
IE1 |= WDTIE;
InitClock();
InitRTC();
InitKey();
//LCD Init
LCDCTL = LCDON + LCD4MUX + LCDSG0_5; // LCD on, 4-Mux, segments S0-S27
BTCTL = BT_fLCD_DIV128; // LCD clock freq is ACLK/256
P5SEL |= 0xFF;
ResetMem();
__enable_interrupt();
while(1)
{
switch (display_state)
{
case DATETIME:
RTCGetDateTime(&datetime);
DisplayDate(datetime.tm_year, datetime.tm_mon, datetime.tm_mday);
DisplayTime(datetime.tm_hour, datetime.tm_min, datetime.tm_sec);
lpm_delay(1);
break;
case TEMPERATURE:
if (GetTemperature(&temp))
{
DisplayTemperature(temp);
lpm_delay(3);
}
break;
case HUMIDITY:
if (GetTempAndHumi(&temp, &humi))
{
DisplayHumidity(humi);
lpm_delay(3);
}
break;
case VOLTAGE:
DisplayVoltage(GetVoltage());
lpm_delay(2);
break;
default:
display_state = DATETIME;
break;
}
KeyProcess();
}
}
//
void KeyProcess(void)
{
unsigned char key;
long i;
key = GetKey();
switch(display_state)
{
case DATETIME:
if (key & UP) display_state = VOLTAGE;
else if (key & DOWN) display_state = TEMPERATURE;
else if (key & OK) {
for(i=0; i<500000; i++) if (P2IN & BIT3) break; //release.
if (i == 500000)
{ //Long Press
AdjustDateTime();
}
else
{
ReverseBacklight();
}
}
break;
case TEMPERATURE:
if (key & UP) display_state = DATETIME;
else if (key & DOWN) display_state = HUMIDITY;
else if (key & OK) { //SWITCH BACKLIGHT
ReverseBacklight();
}
break;
case HUMIDITY:
if (key & UP) display_state = TEMPERATURE;
else if (key & DOWN) display_state = VOLTAGE;
else if (key & OK) { //switch backlight
ReverseBacklight();
}
break;
case VOLTAGE:
if (key & UP) display_state = HUMIDITY;
else if (key & DOWN) display_state = DATETIME;
else if (key & OK) ReverseBacklight();
break;
default: display_state = DATETIME; break;
}
}
void AdjustDateTime(void)
{
int state = ADJ_YEAR, exit_code = 1;
unsigned char key;
struct tm dt;
RTCGetDateTime(&dt);
dt.tm_year += 2000;
while(exit_code)
{
switch (state)
{
case ADJ_YEAR:
do{
DisplayNum(dt.tm_year);
key = GetKey();
if (key & UP)
dt.tm_year ++;
else if (key&DOWN)
dt.tm_year --;
else if (key & RIGHT)
{
state = ADJ_MON;
break;
}
if (dt.tm_year == 2100) dt.tm_year = 2000;
if (dt.tm_year == 1999) dt.tm_year = 2099;
}while(1);
break;
case ADJ_MON:
do{
DisplayNum(dt.tm_mon);
key = GetKey();
if (key & UP)
dt.tm_mon++;
else if (key & DOWN)
dt.tm_mon--;
else if (key & LEFT)
{
state = ADJ_YEAR;
break;
}
else if (key & RIGHT)
{
state = ADJ_DAY;
break;
}
if (dt.tm_mon == 13) dt.tm_mon = 1;
if (dt.tm_mon == 0) dt.tm_mon = 12;
}while(1);
break;
case ADJ_DAY:
do{
DisplayNum(dt.tm_mday);
key = GetKey();
if (key & UP)
dt.tm_mday++;
else if (key & DOWN)
dt.tm_mday--;
else if (key & LEFT)
{
state = ADJ_MON;
break;
}
else if (key & RIGHT)
{
state = ADJ_HOUR;
break;
}
//
}while(1);
break;
case ADJ_HOUR:
do{
DisplayNum(dt.tm_hour);
key = GetKey();
if (key & UP)
dt.tm_hour++;
else if (key & DOWN)
dt.tm_hour--;
else if (key & LEFT)
{
state = ADJ_DAY;
break;
}
else if (key & RIGHT)
{
state = ADJ_MIN;
break;
}
if (dt.tm_hour == 24) dt.tm_hour = 0;
if (dt.tm_hour == -1) dt.tm_hour = 23;
}while(1);
break;
case ADJ_MIN:
do{
DisplayNum(dt.tm_min);
key = GetKey();
if (key & UP)
dt.tm_min++;
else if (key & DOWN)
dt.tm_min--;
else if (key & LEFT)
{
state = ADJ_HOUR; break;
}
else if (key & RIGHT)
{
state = ADJ_SEC;
break;
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
449_clock.rar
(18.63 KB, 下載次數(shù): 27)
2018-7-18 16:51 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
huan1
時(shí)間:
2018-7-19 16:18
請問您指導(dǎo)怎么用串口顯示ADC的采樣值嗎?
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
色一情一乱一乱一区91av
|
国产伦理一区
|
亚洲精选在线观看
|
欧美狠狠干
|
五月婷婷中文字幕
|
国产毛片毛片毛片
|
91福利在线观看
|
激情网站在线观看
|
亚洲激情文学
|
黄色片网站免费
|
91看片网
|
久久一区二区视频
|
成人毛片在线观看
|
欧美日韩一区二区三区视频
|
1级黄色大片
|
欧美一区二区免费
|
在线观看国产免费视频
|
国产日韩综合
|
在线一区二区三区
|
9l视频自拍九色9l视频成人
|
91精品久久久久
|
女同一区二区
|
久久久精品在线观看
|
午夜性影院
|
久久久久久久影院
|
日韩av在线免费看
|
欧美性猛交xxxx黑人交
|
国产成人免费观看
|
一区二区视频在线
|
久久综合亚洲
|
www.97超碰
|
亚洲成人免费视频
|
国产欧美精品一区二区色综合
|
日本少妇做爰全过程毛片
|
最新超碰
|
中文字幕在线观看一区二区
|
美国黄色一级大片
|
亚洲伊人影院
|
国产特级淫片免费看
|
免费成人毛片
|
一区二区三区四区视频
|