单片机学习——IIC总线及EEPROM实验之二

发布者:LIGANG888最新更新时间:2016-01-20 来源: eefocus关键字:单片机  IIC总线  EEPROM 手机看文章 扫描二维码
随时随地手机看文章
题目:显示000~999跑表,先读数据到EEPROM,再从EEPROM读出,再在数码管上显示出            来     

解决方案 :(C 语言编程)  

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tabledu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};
uchar code tablewe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar bai,shi,ge,num,flag;
uint shu;
void delay1(uchar);
void display(uchar ba,uchar sh,uchar g);
sbit scl=P3^3;
sbit sda=P3^4;
sbit le=P3^6;
sbit leden=P2^5;
sbit wkle=P3^7;
void delay()    //短延时子程序

 ;; 
}
void init()  //初使化子程序
{
 leden=0;
 wkle=0;

 flag=0;
 shu=0;
 bai=0;
 shi=0;
 ge=0;

 TMOD=0x01;   //定时器初始化
 TH0=0xd8;
 TL0=0xf0;
 EA=1;
 ET0=1;
 TR0=1;

 sda=1;
 scl=1;
}

void start()   //开始子程序
{
 sda=1;
 delay();
 scl=1;
 delay();
 sda=0;
 delay();
}

void stop()
{
 sda=0;
 delay();
 scl=1;
 delay();
 sda=1;
 delay();
}
void write_byte(uchar dat)  //写入字节子程序
{
 uchar a,temp;
 temp=dat;
 for(a=0;a<8;a++)
 {
  temp=temp<<1;
  scl=0;
  delay();
  sda=CY;
  delay();
  scl=1;
  delay();
 }
 scl=0;
 delay();
 sda=1;
 delay();
}

uchar read_byte()   //读出字节子程序
{
 uchar a,b,c;
 scl=0;
 delay();
 sda=1;
 delay();
 for(a=0;a<8;a++)
 {
  scl=1;
  delay();
  b=sda;
  c=(c<<1)|b;
  scl=0;
  delay();
 }
 return c;
}

void respon()  //响应子程序
{
 uchar a;
 scl=1;
 delay();
 while((sda==1)&&(a<100))a++;
 scl=0;
 delay();
 
}
void write(uchar add,uchar dat)    //写入子程序
{
 start();
 write_byte(0xa0);
 respon();
 write_byte(add);
 respon();
 write_byte(dat);
 respon();
 stop();
}
uchar read(uchar add)   //读出子程序
{
 uchar dat;
 start();
 write_byte(0xa0);
 respon();
 write_byte(add);
 respon();
 start(); 
 write_byte(0xa1);
 respon();
 dat=read_byte();
 respon();
 stop();
 return dat;
}
void main()  //main 函数
{
 init();
 while(1)
 
   display(bai,shi,ge);
 }

void time0() interrupt 1 //中断子函数
{
 uchar num;
 TH0=0xd8;
 TL0=0xf0;
 num++;
 if(num==10){
     num=0;
  flag=1;
   shu++;
         if(shu==999)
       shu=0;
   bai=shu/100;
   shi=shu%100/10;
   ge=shu%10;
   write(1,tabledu[bai]);
   delay1(3);
   bai=read(1);
   delay1(3);
   write(2,tabledu[shi]);
   delay1(3);
   shi=read(2) ;
   delay1(3);
      write(3,tabledu[ge]);
   delay1(5);
   ge=read(3); 
  
}
void display(uchar ba,uchar sh,uchar g)   //显示子程序
{
 le=1;
 P2=tablewe[1];
 le=0;
 le=1;
 P0=ba;
 le=0;
 delay1(1);
 le=1;
 P2=tablewe[2];
 le=0;
 le=1;
 P0=sh;
 le=0;
 delay1(1);
 le=1;
 P2=tablewe[3];
 le=0;
 le=1;
 P0=g;
 le=0;
 delay1(1); 

void delay1(uchar a) {   //延时子函数
 uint i,j;
 for(j=a;j>0;j--)
     for(i=250;i>0;i--) ;
       

关键字:单片机  IIC总线  EEPROM 引用地址:单片机学习——IIC总线及EEPROM实验之二

上一篇:单片机学习——IIC总线及EEPROM实验之一
下一篇:单片机学习——lcd1602显示实验之二

推荐阅读最新更新时间:2024-03-16 14:44

51单片机针脚排列和定义
针脚排列: 针脚定义: 40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; 注:用万用表测试单片机引脚电流一般为0v或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是保持在0v或者5v的。 ⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊ 控制线:控制线共有4根, ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲
[单片机]
用C51单片机把只带的ADC(12bit)转换为RS232输出
#include reg51.h // STC8G1K08A-SOP8 #include intrins.h /* STC8G1K08A-SOP8 读取 VCC值 ,先发送出去 然后 循环开始 读取ch4的 (P55 ,第3脚)值 发送出去 */ sfr ADC_CONTR = 0xbc; sfr ADC_RES = 0xbd; sfr ADC_RESL = 0xbe; sfr ADCCFG = 0xde; sbit EADC = IE^5; sfr P3M1=0xb1; sfr P3M0=0xb2; sfr P5M1=0xc9; sfr P5M0=0x
[单片机]
PIC 单片机软件编程技巧
控制部分采用P IC l6F7X系列 单片机 ,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1、 动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: list P=16c73 call lefthand
[单片机]
ATtiny2313 EEPROM数据存储器
ATtiny2313包含128字节的EEPROM数据存储器。它是作为一个独立的数据 可以按字节读写。EEPROM的寿命至少为 100,000 次擦除周期。EEPROM 的访问由地 址寄存器、数据寄存器和控制寄存器决定。详见 EEPROM的串行数据下载。 EEPROM 读/ 写访问 EEPROM 的访问寄存器位于I/O 空间。 EEPROM的写访问时间由Table 1给出。自定时功能可以让用户软件监测何时可以开始写 下一字节。用户操作 EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路 中,上电 下电时 VCC 上升/下降速度会比较慢。此时 CPU 可能工作于低于晶振所要求 的电源电压。请参见 P19“ 防止 EEPRO
[单片机]
ATtiny2313 <font color='red'>EEPROM</font>数据存储器
51单片机-交通灯-红绿灯
1. 视频 bilibili视频地址: https://www.bilibili.com/video/av91934816 51单片机-交通灯-红绿灯 2. 文件 文件下载地址: https://download.csdn.net/download/weixin_43130546/12194351 3. 说明 绿灯亮10秒;黄灯亮5秒;红灯亮10秒 4. 代码 #include reg52.h sbit DULA = P2^6; sbit WELA = P2^7; unsigned char code DUTable = { 0x3F,0x06,0x5B,0x4F, 0x66,0x6D,0x7
[单片机]
基于51单片机的步进电机驱动器
 步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器、或角位移发生器等。   有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用,一般需自己设计驱动器。本文介绍的就是为从一日本产旧式打印机上拆下的步进电机而设计的驱动器。本文先介绍该步进电机的工作原理,然后介绍了其驱动器的软、硬件设计。   1. 步进电机的工作原理   该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。   图1 四相步进电机步进示意图      开始时,开关SB接
[单片机]
基于51<font color='red'>单片机</font>的步进电机驱动器
51单片机写LCD1602代码
#include at89x51.h #include stdio.h //------------- #define RW P1_0 #define RS P1_1 #define EN P1_2 #define BUS_LCD P2 #define BF P2_7 //---------------------------- void init(void); void init_lcd(void); void write_ins_lcd(unsigned char); void write_data_lcd(unsigned char,unsigned char); void ack_lcd(void)
[单片机]
基于51单片机的智能小车设计
O 引言 在现有玩具电动车的基础上,加装光电检测器,实现对电动小汽车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。 1 直流调速系统采用PWM调速 直流调速系统采用晶闸管的直流斩波器与整流电路。晶闸管不受相位控制,而是工作在开关状态。当晶闸管被触发导通时,电源电压加到电动机上,当晶闸管关断时,直流电源与电动机断开,电动机经二极管续流,两端电压接近于零。脉冲宽度调制(Pulse Width Modulat-ion),简称PWM。脉冲周期不变。只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速。 脉宽调速也可通过单片机控制继电器的闭合来实
[单片机]
基于51<font color='red'>单片机</font>的智能小车设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved