#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
sbit duan=P2^6;
sbit wei=P2^7;
uchar smg_duan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay()
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void ack()
{
uchar i=0;
scl=1;
delay();
while((sda==1)&&(i<200))i++;
scl=0;
delay();
}
void noack()
{
sda=1;
delay();
scl=1;
delay();
scl=0;
delay();
}
void iicwr_byte(uchar dat)
{
uchar i;
scl=0;
for(i=0;i<8;i++)
{
if(dat&0x80)
{
sda=1;
}
else
{
sda=0;
}
dat=dat<<1;
delay();
scl=1;
delay();
scl=0;
delay();
}
sda=1;
delay();
}
uchar iicre_byte()
{
uchar i,dat;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
dat=dat<<1;
if(sda)
{
dat++;
}
scl=0;
delay();
}
return dat;
}
void init()
{
sda=1;
scl=1;
}
void iicwrite_byte(uchar add,uchar dat)
{
init();
start();
iicwr_byte(0xa0);
ack();
iicwr_byte(add);
ack();
iicwr_byte(dat);
ack();
stop();
}
uchar iicread_byte(uchar add)
{
uchar a;
init();
start();
iicwr_byte(0xa0);
ack();
iicwr_byte(add);
ack();
start();
iicwr_byte(0xa1);
ack();
a=iicre_byte();
noack();
stop();
return a;
}
void main()
{
uchar k;
k=iicread_byte(1);
k=k%10;
duan=1;
wei=1;
P0=smg_duan[k];
k++;
iicwrite_byte(1,k);
while(1);
}
Proteus软件是一款可以对单片机及外围电路进行仿真的软件,对于资金有限的人,可以不用买实物就能在电脑上用此软件仿真,能达到同样的效果。
打开Proteus软件,出现以下界面,右面的一大块是绘图窗口,左面有视图小窗口,紧挨着下面分别是元器件列表、控制按钮点击菜单栏中的File,在下拉菜单中选择OpenDesign(打开设计),此处在下已经提前准备好了设计图,下面都以此为例作为讲解。然后从中选择DSN类型文件(为默认Proteus软件类型)。打开后,绘图窗口里面有做好的图,右面是数码管,左面的是AT89C51单片机。在绘图窗口双击AT89C51单片机,d出窗口,需要根据硬件参数修改时钟周期,此处为12MHz再选择ProgramFile(就是程序的HEX形式文件)
以上就是关于用51单片机先在EEPROM中写入数据,然后读取数据显示在数码管上全部的内容,包括:用51单片机先在EEPROM中写入数据,然后读取数据显示在数码管上、proteus仿真软件怎么用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)