微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机 EEPROM 24c02 + 数码管 + 中断 统计开机次数

51单片机 EEPROM 24c02 + 数码管 + 中断 统计开机次数

时间:11-19 来源:互联网 点击:
>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码;

>_<:delay.c

1 #include "delay.h"2 /*3 uS延时函数,含有输入参数 unsigned char t,无返回值4 unsigned char 是定义无符号字符变量,其值的范围是5 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时6 长度如下 T=tx2+5 uS 7 */8 void DelayUs2x(unsigned char t)9 {   10     while(--t);11 }12 /*13 mS延时函数,含有输入参数 unsigned char t,无返回值14 unsigned char 是定义无符号字符变量,其值的范围是15 0~255 这里使用晶振12M,精确延时请使用汇编16 */17 void DelayMs(unsigned char t)18 {19     while(t--)20     {21         //大致延时1mS22         DelayUs2x(245);23         DelayUs2x(245);24     }25 }

>_<:delay.h

1 #ifndef __DELAY_H__2 #define __DELAY_H__3 /*4  uS延时函数,含有输入参数 unsigned char t,无返回值5  unsigned char 是定义无符号字符变量,其值的范围是6  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时7  长度如下 T=tx2+5 uS 8 */9 void DelayUs2x(unsigned char t);10 /*11  mS延时函数,含有输入参数 unsigned char t,无返回值12  unsigned char 是定义无符号字符变量,其值的范围是13  0~255 这里使用晶振12M,精确延时请使用汇编14 */15 void DelayMs(unsigned char t);16 17 #endif

>_<:display.c

1 #include"display.h"2 #include"delay.h"3 4 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换5 //sbit LATCH1=P2^0;//定义锁存使能端口 段锁存6 //sbit LATCH2=P2^3;//                 位锁存7 8 unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~99 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码10 unsigned char TempData[8]; //存储显示值的全局变量11 /*12 显示函数,用于动态扫描数码管13 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示14 如输入0表示从第一个显示。15 Num表示需要显示的位数,如需要显示99两位数值则该值输入216 */17 void Display(unsigned char FirstBit,unsigned char Num)18 {19     static unsigned char i=0;20 21     DataPort=0;   //清空数据,防止有交替重影22     LATCH1=1;     //段锁存23     LATCH1=0;24 25     DataPort=dofly_WeiMa[i+FirstBit]; //取位码 26     LATCH2=1;     //位锁存27     LATCH2=0;28 29     DataPort=TempData[i]; //取显示数据,段码30     LATCH1=1;     //段锁存31     LATCH1=0;32 33     i++;34     if(i==Num)35        i=0;   36 }37 /*38 定时器初始化子程序39 */40 void Init_Timer0(void)41 {42     TMOD = 0x01;      //使用模式1,16位定时器,使用""符号可以在使用多个定时器时不受影响             43     //TH0=0x00;          //给定初值44     //TL0=0x00;45     EA=1;            //总中断打开46     ET0=1;           //定时器中断打开47     TR0=1;           //定时器开关打开48 }49 /*50 定时器中断子程序51 */52 void Timer0_isr(void) interrupt 1 53 {54     TH0=(65536-2)/256;          //重新赋值 2ms55     TL0=(65536-2)%256;56     Display(0,8);57 }

>_<:display.h

1 #include2 3 #ifndef __DISPLAY_H__4 #define __DISPLAY_H__5 6 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换7 sbit LATCH1=P2^2;//定义锁存使能端口 段锁存8 sbit LATCH2=P2^3;//                 位锁存9 10 extern unsigned char TempData[8]; //存储显示值的全局变量11 extern unsigned char code dofly_DuanMa[10];12 /*13 显示函数,用于动态扫描数码管14 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示15 如输入0表示从第一个显示。16 Num表示需要显示的位数,如需要显示99两位数值则该值输入217 */18 void Display(unsigned char FirstBit,unsigned char Num);19 /*20 定时器初始化子程序21 */22 void Init_Timer0(void);23 24 #endif

>_<:i2c.c

1 /*--2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器4 周期,即晶振频率要小于12MHZ)5 */            6 #include "i2c.h"7 #include "delay.h"8 #define  _Nop()  _nop_()  //定义空指令                       9 bit ack;                  //应答标志位10 sbit SDA=P2^1;11 sbit SCL=P2^0;12 /*13 启动

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top