第 17课,写入按键次数到 24c02,并读出来显示在 4个 LED上。并脱机运行验证结果。
这一课我们用 24c02完成一个实际应用的场合,在 24c02中记录按键次数并用二机制
显示在 4个 LED上。下次开机时,将继续显示上次的按键次数。这些工作在工控领域有十
分广泛的应用。
我们将在第一次运行过后,再断点,学习 DX516的脱机运行,并看运行结果。
――――――――――――――――――――
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include
//包括一个 52
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
内核的头文件
char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
#define WriteDeviceAddress 0xa0 //定义器件在 IIC总线中的地址
#define ReadDviceAddress 0xa1
sbit SCL=P2^7;
sbit SDA=P2^6;
sbit P10=P1^0;
sbit K1=P3^2;
//定时
函数
excel方差函数excelsd函数已知函数 2 f x m x mx m 2 1 4 2拉格朗日函数pdf函数公式下载
void DelayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--) ;
}
}
//开始总线
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//结束总线
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
//发 ACK0
void NoAck()
{
SDA=1;
SCL=1;
SCL=0;
}
//测试 ACK
bit TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
//写入 8个 bit到 24c02
Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
//写入一个字节到 24c02中
void Write24c02(uchar ch,uchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
DelayMs(10);
}
//从 24c02中读出 8个 bit
uchar Read8Bit()
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
//从 24c02中读出 1个字节
uchar Read24c02(uchar address)
{
uchar ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return(ch);
}
//写入按键次数到 24c02,并读出来显示在 4个 LED上
void main(void) // 主程序
{
uchar c1,c2;
while(1)
{
c1=Read24c02(0x01); //读出 24c02第一个地址数据
P1=c1; //显示在 P1口的 4个 LED上
if(!K1) //按键处理
{
c1++; //值加 1
Write24c02(c1,0x01); //重新写入 24c02
while(!K1); //等待按键松开
for(c2=0;c2<250;c2++); //松开按键去抖
}
}
}
――――――――――――――――――――――――――――――――
程序中,不断读出 24c02的 0x01位置的数据出来,并显示在 P1口上,我们可以在 4
个 LED上观察到低 4位的数据变化。
当检查到按键时,就将前面读出来的值加 1,写入在 24c02 中的同一个位置中。下一
个循环中,值又被读出来并显示。
编译,联机,并运行。不断按 K1,可以看到 P1的 4个 LED不断以二机制变化显示。
下面我们试验脱机运行方式,并验证 24c02的非挥发特性。
我们记住目前的 led显示状态,再将 dx516后面 usb取电板拔下。使 Dx516仿真器断
电。再将仿真器上旁边的一个跳线跳到“RUN”的位置,这时仿真器就会像一个烧好了程
序的 51芯片一样工作,这就是 DX516的脱机运行工作方式,这种方式对特殊的调试有很大
的帮助,进入脱机方式后,就会直接运行上次调试过的程序。
跳好线之后,请重新插上 usb取电板,上电。可以看到 dx516上面的蓝灯闪烁 3次,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示进入了脱机运行方式,并开始全速运行上次用户调试过的程序。
我们可以直接看到 4个 LED的显示状况,和上次断电之前是一样的。按 K1,4个 LED
又继续按照二机制方式加 1。程序继续正常工作。
好,试验完成,我们将脱机运行的跳线,跳回到“EMB”方向,以便下一次课程继续
仿真运行。
作业:
修改为用 24c02的另一个位置 0x08保存数据。并用 DX516脱机运行方式验证。