基于51单片机的I2C通信及从AT24C02读取保存数据来显示在4位数码管上的项目工程
一、前言
1、基于51单片机的I2C通信及从AT24C02读取保存数据来显示在4位数码管上的项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路
2、基于51单片机的I2C通信及从AT24C02读取保存数据来显示在4位数码管上的项目构思
(1)、声明程序变量思维导图
(2)、程序子函数思维导图
(3)、程序主函数思维导图
二、基于51单片机的I2C通信及从AT24C02读取保存数据来显示在4位数码管上的项目的Keil软件编写的单片机C语言程序
/***Main.C***/
#include <reg52.h>//包含52单片机头文件
#include "I2C.H"//包含I2C.H头文件
#define uchar unsigned char//自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。)
#define uint unsigned int//自定义uint为unsigned int(即有符号整数型数据,数据范围:0到65535。)
uchar i2cwriteflag;//AT24C02存储芯片写入标志位变量
uchar qian,bai,shi,ge;//数值个位变量、数值十位变量、数值百位变量、数值千位变量
uchar valuege,valueshi,valuebai,valueqian;//数值个位数变量、数值十位数变量、数值百位数变量、数值千位数变量
uint count,value;//声明定时器0中断次数变量、数值变量
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共阴数码管段码数字0~9字码表,高电平点亮数码管段码数字0~9。
// void Delay100us() //晶振11.0592MHz,100微妙延时。
//{
// unsigned char i, j;
// _nop_();
// _nop_();
// i = 2;
// j = 15;
// do
// {
// while (--j);
// }
// while (--i);
// }
void delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
// void ShuMaGuanDisplayValue(uint value)//数码管显示数值函数
//{
// qian=value%10000/1000;//数码管千位变量
// bai=value%1000/100;//数码管百位变量
// shi=value%100/10;//数码管十位变量
// ge=value%10;//数码管个位变量
//
// P2=0xfe;//数码管千位显示位
// P0=table[qian];//数码管千位数值显示
// delay(5);//延时
//
// P2=0xfd;//数码管百位显示位
// P0=table[bai];//数码管百位数值显示
// delay(5);//延时
//
//
// P2=0xfb;//数码管十位显示位
// P0=table[shi];//数码管十位数值显示
// delay(5);//延时
//
// P2=0xf7;//数码管个位显示位
// P0=table[ge];//数码管个位数值显示
// delay(5);//延时
// weixuan=1;
// P0=0xfe;//数码管千位显示位
// weixuan=0;
// duanxuan=1;
// P0=table[qian];//数码管千位数值显示
// duanxuan=0;
// P0=0xff;
// Delay(5);//延时
//
// weixuan=1;
// P0=0xfd;//数码管百位显示位
// weixuan=0;
// duanxuan=1;
// P0=table[bai];//数码管百位数值显示
// duanxuan=0;
// P0=0xff;
// Delay(5);//延时
//
// weixuan=1;
// P0=0xfb;//数码管十位显示位
// weixuan=0;
// duanxuan=1;
// P0=table[shi];//数码管十位数值显示
// duanxuan=0;
// P0=0xff;
// Delay(5);//延时
//
// weixuan=1;
// P0=0xf7;//数码管个位显示位
// weixuan=0;
// duanxuan=1;
// P0=table[ge];//数码管个位数值显示
// duanxuan=0;
// P0=0xff;
// Delay(5);//延时
// }
void ShuMaGuanDisplayValue(uchar valuege,valueshi,valuebai,valueqian)//数码管显示数值函数
{
P2=0xf7;//数码管个位显示位
P0=table[valuege];//数码管个位数值显示
delay(5);//延时
P2=0xfb;//数码管十位显示位
P0=table[valueshi];//数码管十位数值显示
delay(5);//延时
P2=