/************************************************
跳线设置:J7拔掉,双排针除PSEN外全部插上
硬件结构框架:
1,IIC总线芯AT24C02
2,MCU STC89C52
显示效果:
1,在数码管上计数
2,断电记忆
相关知识点:
1,类似IIC总线芯片的操作
功能描述:利用定时器产生一个0~99秒变化的秒表,并且显示在数码管上,
每过一秒将这个数写入板上的AT24C02内部。当关闭实验板电源,并再次打开
实验板电源时,单片机先进入AT24C02中将原来写入的数读取出来,接着此数
继续变化并显示在数码管上。
************************************************/
#include"AT89x52.h"
#include"51hei.H"
#define unint unsigned int
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
sbit DUAN=P2^6; //74HC573的LE端 U5 LED的段选端
sbit WEI=P2^7; //74HC573的LE端 U4 LED的位选端
uchar Temp[]={
0x3f, /*0*/
0x06, /*1*/
0x5b, /*2*/
0x4f, /*3*/
0x66, /*4*/
0x6d, /*5*/
0x7d, /*6*/
0x07, /*7*/
0x7f, /*8*/
0x6f /*9*/
}; //共阴显示字库
unint DATA2;
void delay(){;;} //稍微延时
void init() //初始化
{
sda=1;
scl=1;
delay();
}
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止信号
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //应答信号
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<255))i++;
scl=0;
delay();
}
void write_byte(uchar date) //写一个字节
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
scl=0;
delay();
temp<<=1;
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte(void) //读一个字节
{
unint i,j;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++) /*循环8次读出一个字节数据*/
{
scl=1;
delay();
j=(j<<1)|sda;
scl=0;
delay();
}
return j;
}
void write_add(uchar address,uchar date)
{ //指定地址写数据
start(); /*初始信号*/
write_byte(0xa0); /*写入芯片地址0XA0*/
respons(); /*应答信号*/
write_byte(address); /*写入芯片内部寄存器地址ADDRESS*/
respons(); /*应答信号*/
write_byte(date); /*写入数据*/
respons(); /*应答信号*/
stop(); /*停止信号*/
}
uchar read_add(uchar address)
{
uchar date;
start(); /*初始信号*/
write_byte(0xa0); /*写入芯片地址0XA0*/
respons(); /*应答信号*/
write_byte(address); /*写入芯片内部寄存器地址ADDRESS*/
respons(); /*应答信号*/
start(); /*初始信号*/
write_byte(0xa1); /*初始信号*/
respons(); /*写入芯片地址0XA1(读)*/
date=read_byte(); /*读出数据*/
stop(); /*停止信号*/
return date; /*返回读出值*/
}
void init_MCU(void) //MCU初始设置
{
TMOD=0x01;
TCON=0x10;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
IE=0x82;
}
void wei_1(uchar wei) //数码管位控制
{ uchar i;
P0=wei;
WEI=1;
WEI=0;
for(i=0;i<1;i++);
P0=0xff;
WEI=1;
WEI=0;
}
void duan_1(uchar duan) //数码管段控制
{
P0=Temp[duan];
DUAN=1;
DUAN=0;
}
void jishuan(uchar DATA) //数码管显示
{
unint i;
uchar ge,shi,bai;
ge=DATA%100%10;
shi=DATA%100/10;
bai=DATA/100;
duan_1(ge);
wei_1(0xfb);
duan_1(shi);
wei_1(0xfd);
duan_1(bai);
wei_1(0xfe);
//wei_1(0xff);
}
void timer0() interrupt 1 //TR0
{
unint i;
if(i++>=1250)
{
i=0;
if(DATA2++>=255)DATA2=0;
}
TH0=(65536-500)/256;
TL0=(65536-500)%256;
}
void main()
{ guandz();
init_MCU(); /*MCU初始化*/
DATA2=read_add(0); /*读存储器数据*/
while(1)
{
init(); /*存储器初始化*/
write_add(0,DATA2); /*指定地址写数据*/
jishuan(DATA2); /*读出数据并显示*/
}
}
zhongxian.zip_存储 单片机
版权申诉
170 浏览量
2022-09-21
19:04:59
上传
评论
收藏 20KB ZIP 举报
JaniceLu
- 粉丝: 80
- 资源: 1万+
最新资源
- 基于C++的App图标资源库设计源码 - libicon
- 基于Java的日记本应用程序设计源码 - Diary
- 基于C#的.NET模板引擎设计源码 - jntemplate
- 基于51单片机+AC24C04+LCD1602显示的电子密码锁程序源代码及电路仿真.zip
- 基于C++的图形共享内存轻量级设计源码 - graphic_surface_lite
- 深入解析指令调度与延迟分支.zip
- 基于STC15F104E系列单片机的EEPROM应用程序测试例程KEIL工程源码.zip
- 基于STC15F104E系列单片机的串口通讯应用程序测试例程KEIL工程源码.zip
- java-leetcode题解之第844题比较含退格的字符串.zip
- java-leetcode题解之第824题山羊拉丁文.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈