1.数据类型(u8、u16、u32)

在编写程序时,尤其要注意温度数值与255的关系,设置的边界值能不能有效地超过255!

2.EEPROM存储16位、32位数据方法

假设一个16位的数据需要存储——360

最佳方法,将360/100、360/10%10、360%10分别存入0x01、0x02、0x03地址内。

切记,不可右移八位操作,不知道为啥,这样很容易出问题。

当然,在存储前后关开总线是基本操作。

注意,小要点:

在开机上电读取时,你需要的读出的数值,你要好好想想你读出的值与数码管显示值的关系,比如我一开始脑瘫,读出了jiange_xianshi_ctrl的值,却没有想到数码管显示的是jiange_xianshi的值。。。

3.EEPROM_Write()的延时

10ms!

记忆口诀修改:从一五一十到一十一鸟

其他暂无。。。。。王者荣耀,黄忠,人性游戏,不要相信队友,猥琐发育才是真,才舒服

#include "system.h"
#include <STC15F2K60S2.H>
u8 disp_state = 1;//1-2-3
u16 jiange_xianshi = 1;//1s-5s-30s-60s
u16 jiange_xianshi_ctrl=1;
bit wendu_OFF_ON = 0;
u8 store_index;
u16 count_2000ms;
bit count_2000ms_OFF_ON;//LED
bit LED1_flag = 0;
u8 count_200ms;
u8 led_state = 0xff;
void Led_Process()
{if((LED1_flag == 1)&&(disp_state == 3)){count_200ms = count_200ms%200 + 1;if(count_200ms<100) led_state &= ~0x01;else if(count_200ms<200) led_state |= 0x01;else if(count_200ms>=200) count_200ms = 0;}else{count_200ms = 0;led_state |= 0x01;}Device_Ctrl(0x80,led_state);
}
//时间
bit start_OFF_ON = 0;
u8 hour_xianshi;
u8 minute_xianshi;
u8 second_xianshi;
u8 hour_xianshi_ctrl;
u8 minute_xianshi_ctrl;
u8 second_xianshi_ctrl;
u8 count_time;
void RTC_Pro()
{hour_xianshi = BCDToDec(Read_Ds1302_Byte(0x85));minute_xianshi = BCDToDec(Read_Ds1302_Byte(0x83));second_xianshi = BCDToDec(Read_Ds1302_Byte(0x81));}//温度
u32 count_wendu;
xdata u16 wendu_value;
u8 wendu_xianshi;
u8 wendu_store[10];
void Wendu_Pro()
{if((wendu_OFF_ON == 1)&&(disp_state == 2)){static u8 j = 0;if(count_wendu >= (u32)(jiange_xianshi_ctrl*1000)){count_wendu = 0;wendu_value = (u16)(Read_Wendu()*10);wendu_xianshi = (u8)(wendu_value/10);wendu_store[j] = wendu_xianshi;j++;if(j == 10){j = 0;LED1_flag = 1;disp_state = 3;}else{disp_state = 2;LED1_flag = 0;}}}else{
//        disp_state = 2;}
}void System_Init()
{Device_Ctrl(0x00,0x00);Device_Ctrl(0xa0,0x00);Device_Ctrl(0x80,0xff);Device_Ctrl(0xc0,0x00);Device_Ctrl(0xe0,0xff);Device_Ctrl(0xc0,0xff);
}
//LEDu8 count_led;
bit test = 0;
void Led_Pro()
{if(test == 1)led_state &= ~0x01;elseled_state |= 0x01;
}
//KEY
u8 count_key;
u8 Key_Value,Key_Down,Key_Old;
void Key_Pro()
{if(count_key>=10){count_key = 0;Key_Value = Key_Read();Key_Down = Key_Value&(Key_Old ^ Key_Value);Key_Old = Key_Value;switch(Key_Down){case 4:{if(disp_state ==1){if(jiange_xianshi == 1) jiange_xianshi = 5;else if(jiange_xianshi == 5) jiange_xianshi = 30;else if(jiange_xianshi == 30) jiange_xianshi = 360;else if(jiange_xianshi == 360) jiange_xianshi = 1;}}break;case 5:if(disp_state == 1){disp_state = 2;if(start_OFF_ON == 0){Set_Clock(23,59,50);start_OFF_ON = 1;}else{
//                        start_OFF_ON = 1;hour_xianshi_ctrl = hour_xianshi;minute_xianshi_ctrl = minute_xianshi;second_xianshi_ctrl = second_xianshi;Set_Clock(hour_xianshi_ctrl,minute_xianshi_ctrl,second_xianshi_ctrl);}jiange_xianshi_ctrl = jiange_xianshi;EA = 0;Write_EEPROM(0x01,(u8)(jiange_xianshi_ctrl/100));EA = 1;EA = 0;Write_EEPROM(0x02,(u8)(jiange_xianshi_ctrl/10%10));EA = 1;EA = 0;Write_EEPROM(0x03,(u8)(jiange_xianshi_ctrl%10));EA = 1;EA = 0;Write_EEPROM(0x04,(u8)(jiange_xianshi_ctrl));EA = 1;EA = 0;Write_EEPROM(0x05,99);EA = 1;wendu_OFF_ON = 1;}else{wendu_OFF_ON = 0;}break;case 6:if(disp_state == 3){LED1_flag = 0;store_index++;if(store_index == 10) {store_index = 0;                        }}break;case 7:if(disp_state == 3){disp_state = 1;}break;}}
}
//SMG
u8 code smg_code[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
xdata u16 count_smg = 0;
void SMG_Pro()
{if(disp_state == 1){count_2000ms_OFF_ON = 0;wendu_OFF_ON = 0;smg_buf[0] = 0xff;smg_buf[1] = 0xff;smg_buf[2] = 0xff;smg_buf[3] = 0xff;smg_buf[4] = 0xbf;smg_buf[5] = ((jiange_xianshi>=100)?(smg_code[jiange_xianshi/100]):(0xff));smg_buf[6] = ((jiange_xianshi>=100)?(smg_code[jiange_xianshi/10%10]):((jiange_xianshi>=10)?(smg_code[jiange_xianshi/10]):(0xff)));smg_buf[7] = (jiange_xianshi>=100)?(smg_code[jiange_xianshi%10]):smg_code[jiange_xianshi%10];}else if(disp_state == 2){count_2000ms_OFF_ON = 1;wendu_OFF_ON = 1;smg_buf[0] = smg_code[hour_xianshi/10];smg_buf[1] = smg_code[hour_xianshi%10];smg_buf[2] = ((count_2000ms<1000)?(0xbf):(0xff));smg_buf[3] = smg_code[minute_xianshi/10];smg_buf[4] = smg_code[minute_xianshi%10];smg_buf[5] = ((count_2000ms<1000)?(0xbf):(0xff));smg_buf[6] = smg_code[second_xianshi/10];smg_buf[7] = smg_code[second_xianshi%10];}else if(disp_state == 3){count_2000ms_OFF_ON = 0;wendu_OFF_ON = 0;smg_buf[0] = 0xbf;smg_buf[1] = smg_code[store_index/10];smg_buf[2] = smg_code[store_index%10];smg_buf[3] = 0xff;smg_buf[4] = 0xff;smg_buf[5] = 0xbf;smg_buf[6] = smg_code[wendu_store[store_index]/10];smg_buf[7] = smg_code[wendu_store[store_index]%10];}}
void tm2_isr() interrupt 12
{count_key++;count_led++;if(wendu_OFF_ON == 1){count_wendu++;}else{count_wendu = 0;    }count_smg++;count_time++;if(count_2000ms_OFF_ON == 1){count_2000ms++;if(count_2000ms >= 2000){count_2000ms = 0;}}else{count_2000ms_OFF_ON = 0;}SMG_Disp();Led_Process();//Device_Ctrl(0x80,led_state);
}
u8 ceshi;
void main()
{doRead_Wendu();while(Read_Wendu() == 85);System_Init();
//    Set_Clock(23,59,50);ceshi = Read_EEPROM(0x05);if(ceshi == 99){jiange_xianshi = (Read_EEPROM(0x01)*100)+(Read_EEPROM(0x02)*10)+(Read_EEPROM(0x03));}else{jiange_xianshi = jiange_xianshi_ctrl;}Timer2Init();while(1){Key_Pro();Wendu_Pro();SMG_Pro();RTC_Pro();}
}

第六届“温度记录器”—数据类型(u8、u16、u32)+EEPROM存储16位、32位数据方法+EEPROM_Write()的延时相关推荐

  1. C语言中vu16什么意思,15.stm32 数据类型的定义(常用的U8,U16,U32到底代表什么)

    满意答案 月冰p莹月 2020.09.14 采纳率:48%    等级:12 已帮助:9104人 去百度文库,查看完整内容> 内容来自用户:尘客i 在KeilMDK开发环境里,比如一个无符号32 ...

  2. C语言用printf()打印u8,u16,u32等参数类型

    想必大家都知道printf打印int 型是用%d,但是u8,u16,u32,u64还有s8,s16,s32,s64是如何打印呢,知道的大佬绕行哈,不知道往下看看. what is u8? 常见的u8其 ...

  3. u32在c语言中的作用,c语言中u8,u16,u32(示例代码)

    u8是unsigned char,u16是unsigned short,u32是unsigned long. u8,u16,u32都是C语言数据类型,分别代表8位,16位,32位长度的数据类型,一个字 ...

  4. 近期活动盘点:2019第六届世界互联网大会、面向智慧城市的人本尺度城市形态:理论方法与实践讲座、高级管理人员AI大数据能力研修班...

    想知道近期有什么最新活动?大数点为你整理的近期活动信息在此 2019第六届世界互联网大会•数字经济产业合作系列活动 2019年10月19日-10月20日 2018年,我国GDP超过90万亿元,全国互联 ...

  5. linux u8 u16 u32 u64,C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub

    C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/doub C 语言printf打印各种数据类型的方法(u8/s8/u16/s16.../u64/double/fl ...

  6. 关于u8 u16 u32的含义

    unsigned int 32 (C语言标准表达方法) 2.uint32_t ; 3.u32; 这三种表达式是同一个意思,只是在不用的版本当中,为了兼容旧版本而出现这么多的表达方式.但不管怎么变化,都 ...

  7. u8 u16 u32 u64 c++

    #define U32 unsigned int  #define U16 unsigned short   #define S32 int  #define S16 short int  #defi ...

  8. U8,U16,U32,U64等是什么类型?

    #define U32 unsigned int #define U16 unsigned short #define S32 int #define S16 short int #define U8 ...

  9. c语言u8u16u的区别,u8,u16,u32和uint8_t,uint16_t,uint32_t的含义

    ST库里面的宏定义,定义如下: #define      __I        volatile const          /*!< defines 'read only' permissi ...

最新文章

  1. rocketmq怎么保证消息一致性_从入门到入土(三)RocketMQ 怎么保证的消息不丢失?...
  2. CodeIgniter中Router类的两个方法
  3. 虚拟机ubuntu安装ssh服务器,经过Xshell远程链接虚拟机VMVARE中的Ubuntu
  4. NET问答: 如何用 C# 计算相对时间 ?
  5. 对于“知识”,我们存在哪些误解?
  6. spring session的生命周期
  7. 【洛谷 P4291】 [HAOI2008]排名系统(Splay,Trie)
  8. com.mysql.jdbc.connection和java.sql.connection的区别
  9. 多线程生产者,消费者例题
  10. pptv图标出现在计算机磁盘,PPTV出现界面乱码如何解决
  11. ppt中控件未在计算机中注册,PowerPoint 中控件没注册是怎么回事?
  12. 三方接口短信验证码怎么选择好的平台?
  13. c#利用API读取微信数据
  14. m1芯片xcode打包IPA processing failed错误解决方案
  15. 『天涯杂谈』语不惊人死不休——2004年最一针见血的500句话(前100句)
  16. grpc客户端调用接口报:too many colons in address 域名配置问题
  17. 子串子序列常见算法面试题
  18. memory management 蓝屏win10,要怎么解决这个蓝屏问题
  19. Google AutoValue详解
  20. [html+js][实现鼠标悬停事件]鼠标移动到行自动变色实现

热门文章

  1. 三、4【Verilog HDL】基础知识之模块和端口
  2. Linux 文件编程 read函数
  3. FEDformer里面的CZ1d
  4. 数据看Kobe,请让我以这样的方式说再见
  5. Timer+TimerTask实现数字时钟
  6. 英国MECMESIN数显初级测力计BFG-200N
  7. 和腾讯工作十几年的资深测试工程师讨论今年校招标准。
  8. 电压掉电监测电路-三极管电路分析
  9. 阿里云警报:wordpress IP验证不当漏洞修复
  10. uva 12086 - Potentiometers--树状数组