那个old的直接在输入数据的出来后进行判断,然后就把new赋给old,之前还想写数组
感觉就是按键那里难写,后面还是要专门写一下按键题
一、Seg
unsigned char ucRtc[3]={23,9,59};//写09会以为时是八进制,所以要写9
unsigned char Seg_Mode=0;//0-时间界面 1-输入界面 2-记录界面
unsigned char ucRtc[3]={23,9,59};//写09会以为时是八进制,所以要写9
unsigned char Input_Data[4]={10,10,10,10};//密码门输入
unsigned char Input_Index=0;//密码门索引值
unsigned char JiLu_Time[3]={23,9,59};//触发时间
①可以把时钟放进来
这样只有在时钟界面时才读取时钟,就不会浪费资源
②双倒序:
数码管的最后一位保存正在输入的数据,然后前一个数据要向前移
移动一位数码管就-1向前一位,在Input_Index=0的时候他是不显示数据的,因为此时还没赋值,只有按下按键了才赋值,然后Input_Index+1
Input_Index是1--4属于是,所以要-1,-i就是把之前显示过的都显示上,-0 -1一直到-i嘛
之前没倒序,就是input的第0位就直接输入在数码管第0位
二、Key
在输入界面,按下对应按键,实现对一位数据的输入,显示如图三所示
unsigned char Input_Data[4]={10,10,10,10};//密码门输入
unsigned char Input_Index=0;//密码门索引值
unsigned char JiLu_Time[3]={23,9,59};//触发时间
unsigned int Data;//储存输入数据到eeprom
unsigned int Data_Old;//输入数据老的值
bit LL_Flag;//新的比老的大标志位
unsigned char EEPROM_String_New[4];//eeprom存放数组
unsigned char EEPROM_String_Old[4];//eeprom读取数组
1.对输入界面清0:
①界面限制
②按下按键
③把数据熄灭
④标志位置位
2.如果读取到一位数据就记录当前记录数据的时间
之前是在记录界面就读取就报错了
3.密码门:
①限制要输入的位数
之前没写index<4他后面就可以输入值,就报错了
②密码门改底层,把不连续的键码值改了,然后重复的就+10什么的
(之前以为是顺序的就直接键码值-6了)
③把键码值赋给输入数据
④赋完值后索引值++,然后为4时卡死4,在跳转界面时再置0
改底层
temp要是0,所以改底层的不连续的对应的密码门都+1,在main里再键码值-1
4.按键切换+eeprom保存:
①如果按下切换按键,并且进入记录界面,那就先进入一个eeprom的保存
1.将需要保存的数据由一个一个数变成一整个数
2.把要保存的数放进eeprom的数组里
3.将eeprom的数组里的数写进eeprom里
4.对比新老数据的大小(输入数据)
5.把new新数据赋给old老数据
②界面切换
③每次切换把输入数据清0
三、Led
四、eeprom
1.如何查看eeprom是否正确:
因为他是上电又读取嘛,然后又有old和new,那就这一次输入1111,然后关掉掉电,再上电,输入1212,看看L4有没有亮(new>old就亮),然后再掉电,再上电,输入1111,看看是不是灭的。这样就看出来eeprom有没有写进去了
2.按键切换+eeprom保存:
①如果按下切换按键,并且进入记录界面,那就先进入一个eeprom的保存
1.将需要保存的数据由一个一个数变成一整个数
2.把要保存的数放进eeprom的数组里
3.将eeprom的数组里的数写进eeprom里
4.对比新老数据的大小(输入数据)
5.把new新数据赋给old老数据
②界面切换
③每次切换把输入数据清0
tips:也可以先界面切换再保存,mode==2时
3.将十进制存进去时存为八进制:
①高位:>>8移动到低位上
②低位:&0x0ff 把高位除掉
4.EEPROM_String_Data:
一个数据对应一个索引值
5.上电后读取老old值:
读取到eeprom的old的数组里
然后把这个数组的第2、3位的数据读出来,然后十六进制变十进制(高位移动8位移回来)赋给data_old
6.不用写限制啊,只是以十六进制写进去eeprom里,只要移位就行了,然后数据在eeprom前和后写,不要在按键里写,之前报错(读取的是0)应该就是因为写在按键里了,因为他们每次进的时候不一样所以不行,显示什么储存什么都要写一起
把那个flag删了就对了,seg_mode==1时清0是ok的