在DOFLY的教学中有一个关于“记忆上次上次开机状态“的程序:
教学源代码如下:
#include <reg52.h>
#include "i2c.h"
#include "delay.h"
#include "display.h"
sbit KEY_ADD=P3^3; //定义按键输入端口
sbit KEY_DEC=P3^4;
/*-----------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char num=0;
Init_Timer0();
IRcvStr(0xae,0,&num,1);
KEY_ADD=1; //按键输入端口电平置高
KEY_DEC=1;
while (1) //主循环
{
if(!KEY_ADD) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num<999) //加操作
{
num++;
ISendStr(0xae,0,&num,1); //写入24c02
DelayMs(10);
}
}
}
}
if(!KEY_DEC) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_DEC) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_DEC);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num>0) //减操作
{
num--;
ISendStr(0xae,0,&num,1); //写入24c02
DelayMs(10);
}
}
}
}
TempData[0]=dofly_DuanMa[num/100];
TempData[1]=dofly_DuanMa[(num%100)/10];
TempData[2]=dofly_DuanMa[(num%100)%10];
//主循环中添加其他需要一直工作的程序
}
}
里面unsigned char num=0;的范围是0-255,我如果要保存一个大于255的数,比如9999,那该怎么改呢,我看过别的论坛上有的人说要把9999拆成2个99保存,我想一个char型的数据怎么拆,有没有高手指点下,有没有直接能改成int型保存的可能,不过24C02一个地址单元好像只能保存0-255吧,
知道的朋友都别吝啬,多指点指点
楼上的斑竹的意思是 TempData[0]=dofly_DuanMa[num/100];
TempData[1]=dofly_DuanMa[(num%100)/10];
TempData[2]=dofly_DuanMa[(num%100)%10];
让我保存他们的每一位?是这样吗
我把int型拆分成2个CHAR还是不行,不知道是写不进去还是读不出来,帮我看看错在哪了
#include <reg52.h>
#include "i2c.h"
#include "delay.h"
#include "display.h"
sbit KEY_ADD=P3^3; //定义按键输入端口
sbit KEY_DEC=P3^4;
/*-----------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned int num;
unsigned char num1;
unsigned char num2;
num1=num/256;
num2=num%256;
num=num1*256+num2;
Init_Timer0();
IRcvStr(0xae,0,&num1,1);
IRcvStr(0xad,0,&num2,1);
KEY_ADD=1; //按键输入端口电平置高
KEY_DEC=1;
while (1) //主循环
{
if(!KEY_ADD) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num<9999) //加操作
{
num++;
ISendStr(0xae,0,&num1,1); //写入24c02
ISendStr(0xde,0,&num2,1);
DelayMs(10);
}
}
}
}
if(!KEY_DEC) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_DEC) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_DEC);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num>0) //减操作
{
num--;
ISendStr(0xae,0,&num1,1); //写入24c02
ISendStr(0xde,0,&num2,1);
DelayMs(10);
}
}
}
}
TempData[0]=dofly_DuanMa[num/100];
TempData[1]=dofly_DuanMa[(num%100)/10];
TempData[2]=dofly_DuanMa[(num%100)%10];
//主循环中添加其他需要一直工作的程序
}
}
zacharias 发表于 2017-6-28 17:43
大神可以把 I2C.H 发我一下吗
1.15 KB, 下载次数: 22, 下载积分: 黑币 -5
iic
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |