【无标题】

MSP430cc2530简单万年历设计

`
msp430cc2530的简单万年历设计



主函数

二、使用步骤

1.主要代码

代码如下(示例):

#include "rtc.h"
#include "ioCC2530.h"
#include "stdarg.h"
#include "sys_init.h"
#include <string.h>
#include <stdio.h>
#include "DHT11.h"
#include "bmp280.h"
unsigned char time_data_alarm[2] = {0};
unsigned char time_data[10] = {0};
unsigned char time_data_set[2] = {0}; //存储时间
int data_weather[2] = {0}; //存天气的湿度和温度数
char data_weather_char[2]={0};//字符
char oled_show_data[30] = {0};
#define S1 (1 << 0)
#define S2 (1 << 1)
#define S3 (1 << 4)
#define S4 (1 << 5)
#define S5 (1 << 0)
#define S6 (1 << 1)

#define KEI1 P0_0 //设置按键
#define KEI2 P0_1 //确定按键
#define KEI3 P0_4 //+1
#define KEI4 P0_5 //+10
#define KEI5 P1_0
#define KEI6 P1_1
static void key_delay_us(void)
{
	volatile unsigned short i;
	for (i = 0; i < 1; i++)
	{
		asm("NOP");
	}
}
void key_io_config_init(void)
{
	P0SEL &= ~(S1 | S2 | S3 | S4);
	P0DIR &= ~(S1 | S2 | S3 | S4);
	P0INP &= ~(S1 | S2 | S3 | S4); // 0:上拉、1:下拉

	P1SEL &= ~(S5 | S6);
	P1DIR &= ~(S5 | S6);
	P1INP &= ~(S5 | S6); // 0:上拉、1:下拉
}
unsigned int counter = 0;
unsigned char set_flag = 0;
unsigned char set_context = 0;
unsigned char set_tmp = 0;
unsigned char ID_data[] = "19401180111/106";//第九页显示ID
void main(void)
{
	uchar temp[2];
	uchar temp1[2];
	xtal_init();
	time1_init();
	// led_init();
          uart0_init(0x00, 0x00);            //初始化串口:无奇偶校验,停止位为1位

	key_io_config_init();

	BMP280_S32_t tmp2;
	double P_Result = 0;
	unsigned char sta = 0;
	unsigned int a = 0;
	char data[20];
	memset(data, 0, sizeof(data));
	BMP_SPI_Init();
	bmp280_init();
	OLED_Init(); // OLED初始化
	OLED_Clear();
	ModifyTime(Decimal_BCD(22), Decimal_BCD(5), Decimal_BCD(11), Decimal_BCD(3), Decimal_BCD(7), Decimal_BCD(7), Decimal_BCD(0));

	while (1)
	{

		sta = 0;
		sta = bmp280_read(BMP_Status | BMP280_Read);

		tmp2 = bmp280_read_Pdata();
		P_Result = bmp280_compensate_P_double(tmp2);
		// a=(int) P_Result;
		// data[0]=a/100+0x30;
		P_Result = P_Result / 1000;
		a = (int)P_Result;
		data[0] = a / 100 + 0x30;
		a = a % 100;
		data[1] = a / 10 + 0x30;
		a = a % 10;
		data[2] = a + 0x30;
		data[3] = 'k';

		memset(temp, 0, 3);
		DHT11();
		temp[0] = wendu_shi + 0x30;
		temp[1] = wendu_ge + 0x30;
		temp1[0] = shidu_shi + 0x30;
		temp1[1] = shidu_ge + 0x30;
                   
                  data_weather[0]= (temp[0]-'0')*10+(temp[1]-'0');//温度
                  data_weather[1]=(temp1[0]-'0')*10+(temp1[1]-'0');
                  // data_weather[1]=12;//湿度
		//if (0 == (counter % 5)) // 50ms
		//{
			if (0 == KEI1)
			{
				key_delay_us();
				if (0 == KEI1)
				{
					counter = 1;
					if (set_flag)
					{
						set_context++;
					}
					else
					{

						set_flag = 1;
						set_context = 0;
					}
					set_tmp = 0;
					OLED_Clear();
					OLED_ShowCHinese(16, 0, 7);
					OLED_ShowCHinese(32, 0, 8);
					memset(oled_show_data, 0, sizeof(oled_show_data));
					sprintf(oled_show_data, "%02d", set_tmp);

					switch (set_context)
					{
					case 0:
						OLED_ShowCHinese(48, 0, 18);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 1:
						OLED_ShowCHinese(48, 0, 17);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 2:
						OLED_ShowCHinese(48, 0, 16);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 3:
						OLED_ShowCHinese(48, 0, 20);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 4:
						OLED_ShowCHinese(48, 0, 13);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 5:
						OLED_ShowCHinese(48, 0, 12);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 6:
						OLED_ShowCHinese(48, 0, 11);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 7:
						OLED_ShowCHinese(48, 0, 13);
						OLED_ShowString1(0, 6, "alarm", 16);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
					case 8:
						OLED_ShowCHinese(48, 0, 12);
						OLED_ShowString1(0, 6, "alarm", 16);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
						break;
                                                   case 9:
						OLED_ShowString1(0, 0, (unsigned char *)ID_data, 16);//显示学号
						break;
                                                    case 10://显示天气
                                                      OLED_Clear();
						if(data_weather[0]>20&data_weather[1]>60)
                                                            {
                                                              OLED_ShowCHinese(48, 0, 24);
                                                            }
                                                            if(data_weather[0]>20&data_weather[1]<50)
                                                            {
                                                              OLED_ShowCHinese(48, 0, 23);
                                                            }
                                                             if(data_weather[0]>20&data_weather[1]>=50&data_weather[1]<=60)
                                                            {
                                                              OLED_ShowCHinese(48, 0, 22);
                                                            }
                                                             if(data_weather[0]<=20&data_weather[1]<=50)
                                                            {
                                                              OLED_ShowCHinese(48, 0, 23);
                                                            }
                                                           // else
                                                            // OLED_ShowCHinese(48, 0, 24);
						break;
					}
				}
			}
			else if (0 == KEI2)
			{
				if (set_flag)
				{
					key_delay_us();
					if (0 == KEI2)
					{
						counter = 1;
						switch (set_context)
						{
						case 0:
							ModifyTime_yea(Decimal_BCD(set_tmp));
							time_data_set[0] = set_tmp + 2000;
							break;
						case 1:
							ModifyTime_mon(Decimal_BCD(set_tmp));
							time_data_set[1] = set_tmp;
							break;
						case 2:
							ModifyTime_da(Decimal_BCD(set_tmp));

							break;
						case 3:
							ModifyTime_week(Decimal_BCD(set_tmp));
							break;
						case 4:
							ModifyTime_hours(Decimal_BCD(set_tmp));
							break;
						case 5:
							ModifyTime_min(Decimal_BCD(set_tmp));
							break;
						case 6:
							ModifyTime_sed(Decimal_BCD(set_tmp));
							break;
						case 7:
							time_data_alarm[0] = set_tmp;
							break;
						case 8:
							time_data_alarm[1] = set_tmp;
							break;
						}
						set_tmp = 0;
						OLED_Clear();
						OLED_ShowCHinese(16, 0, 7);
						OLED_ShowCHinese(32, 0, 8);
						OLED_ShowCHinese(48, 0, 21);
						OLED_ShowCHinese(64, 0, 22);
						set_flag = 0;
						OLED_Clear();
					}
				}
			}
			else if (0 == KEI3)
			{
				if (set_flag)
				{

					key_delay_us();
					if (0 == KEI3)
					{
						counter = 1;
						switch (set_context)
						{
						case 0:
							if (set_tmp + 1 <= 99)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						case 1:
							if (set_tmp + 1 <= 12)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 1;
							}
							break;
						case 2:

							if (time_data_set[1] == 1 | time_data_set[1] == 3 | time_data_set[1] == 5 | time_data_set[1] == 7 | time_data_set[1] == 8 | time_data_set[1] == 10 | time_data_set[1] == 12)
							{
								if (set_tmp + 1 <= 31)
								{
									set_tmp += 1;
								}
								else
								{
									set_tmp = 1;
								}
							}
							if (time_data_set[1] == 2)
							{
								if ((time_data_set[0] % 4 != 0) || (time_data_set[0] % 100 == 0 && time_data_set[0] % 400 != 0))
								{
									if (set_tmp + 1 <= 28)
									{
										set_tmp += 1;
									}
									else
									{
										set_tmp = 0;
									}
								}
								else
								{
									if (set_tmp + 1 <= 29)
									{
										set_tmp += 1;
									}
									else
									{
										set_tmp = 1;
									}
								}
							}

							else
							{
								if (set_tmp + 1 <= 30)
								{
									set_tmp += 1;
								}
								else
								{
									set_tmp = 1;
								}
							}
							break;
						case 3:
							if (set_tmp + 1 <= 7)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 1;
							}
							break;
						case 4:
							if (set_tmp + 1 <= 24)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						case 5:
							if (set_tmp + 1 <= 60)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						case 6:
							if (set_tmp + 1 <= 60)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						case 7:
							if (set_tmp + 1 <= 24)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						case 8:
							if (set_tmp + 1 <= 60)
							{
								set_tmp += 1;
							}
							else
							{
								set_tmp = 0;
							}
							break;
						}
						memset(oled_show_data, 0, sizeof(oled_show_data));
						sprintf(oled_show_data, "%02d", set_tmp);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
					}
				}
			}
			else if (0 == KEI4)
			{
				if (set_flag)
				{
					key_delay_us();
					if (0 == KEI4)
					{
						counter = 1;
						switch (set_context)
						{
						case 0:
							if (set_tmp + 10 <= 99)
							{
								set_tmp += 10;
							}
							break;
						case 1:
							if (set_tmp + 10 <= 12)
							{
								set_tmp += 10;
							}

							break;
						case 2:
							if (set_tmp + 10 <= 30)
							{
								set_tmp += 10;
							}

							break;
						case 3:
							if (set_tmp + 10 <= 7)
							{
								set_tmp += 10;
							}
							break;
						case 4:
							if (set_tmp + 10 <= 24)
							{
								set_tmp += 10;
							}
							break;
						case 5:
							if (set_tmp + 10 <= 60)
							{
								set_tmp += 10;
							}
							break;
						case 6:
							if (set_tmp + 10 <= 60)
							{
								set_tmp += 10;
							}
							break;
						case 7:
							if (set_tmp + 10 <= 24)
							{
								set_tmp += 10;
							}
							break;
						case 8:
							if (set_tmp + 10 <= 60)
							{
								set_tmp += 10;
							}
							break;
						}
						memset(oled_show_data, 0, sizeof(oled_show_data));
						sprintf(oled_show_data, "%02d", set_tmp);
						OLED_ShowString_numstring_3232(32, 2, (unsigned char *)oled_show_data);
					}
				}
			}
			else if (0 == KEI5)
			{
				key_delay_us();
				if (0 == KEI5)
				{
				}
			}
			else if (0 == KEI6)
			{
				key_delay_us();
				if (0 == KEI6)
				{
				}
			}
		//}
		if (set_flag)
		{
			if (0 == (counter % 200)) // 6s
			{
				set_flag = 0;
			}
		}
		else
		{
			if (set_flag == 0)
			{

				counter = 0;
				memset(time_data, 0, sizeof(time_data));
				Read_RTC(time_data);
				memset(oled_show_data, 0, sizeof(oled_show_data));
				sprintf(oled_show_data, "%02d-%02d-%02d", BCD_Decimal(time_data[2]), BCD_Decimal(time_data[1]), BCD_Decimal(time_data[0]));
				OLED_ShowString(32, 2, (unsigned char *)oled_show_data, 16);
				memset(oled_show_data, 0, sizeof(oled_show_data));
				sprintf(oled_show_data, "20%02d-%02d-%02d", BCD_Decimal(time_data[6]), BCD_Decimal(time_data[5]), BCD_Decimal(time_data[4]));
				OLED_ShowString(28, 4, (unsigned char *)oled_show_data, 16);
				OLED_ShowString1(0, 6, "temp:", 16);
				OLED_ShowString1(40, 6, (unsigned char *)temp, 16);
				OLED_ShowString1(56, 6, "pres:", 16);
				OLED_ShowString1(96, 6, (unsigned char *)data, 16);
				OLED_ShowString1(40, 0, "temp1:", 16);
				OLED_ShowString1(90, 0, (unsigned char *)temp1, 16);
                                    
                                       
                                        //  Uart_Send_String(&data_weather);
                                       
                                        
				if ((time_data_alarm[0] == BCD_Decimal(time_data[2]) & time_data_alarm[1] == BCD_Decimal(time_data[1])) | (BCD_Decimal(time_data[1]) == 0)) //||((BCD_Decimal(time_data[2])==0)))
				{

					OLED_ShowString1(0, 0, "ok:", 16);
					OLED_Clear();
				}
			}
		}
	}
}
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
	EA = 0; //关总中断
	counter++;
	// D6 = !D6;
	T1IF = 0;
	EA = 1; //开总中断
}


最终成果

简单的天气判断,大气压强,温度,有设置闹钟功能


总结

就随便写了写做了记录,就不做详细介绍了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值