基于stc15f2k60s2芯片单片机编程(EEPROM24C02实验)
主函数
#include <stc15f2k60s2.h>
#include <intrins.h>
#include <12.h>
void shumaguan();
sbit K1=P3^0;
unsigned char a;void Timer0Init();unsigned char abile[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
unsigned char saomiao[]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
void Delay100us() //@11.0592MHz
{unsigned char i, j;_nop_();_nop_();i = 2;j = 15;do{while (--j);} while (--i);
}void main()
{P2=0XA0;P0=0X00;a=At24c02Read(1);Timer0Init();while(1){if(K1==0){Delay100us();if(K1==0){a++;}while(!K1);}shumaguan();At24c02Write(1,a);}
}
void Timer0Init(void) //100??@11.0592MHz
{AUXR |= 0x80; //?????1T??TMOD &= 0xF0; //???????TL0 = 0xAE; //??????TH0 = 0xFB; //??????TF0 = 0; //??TF0??TR0 = 1; //???0????ET0=1;EA=1;
}
void Timer0() interrupt 1
{int i;P2=P2&0x1f|0xe0;P0=0xff;P2&=0x1f;P2=P2&0x1f|0xc0;P0=1<<i;P2&=0x1f;P2=P2&0x1f|0xe0;P0=saomiao[i];P2&=0x1f;i++;if(i>7)i=0;
}void shumaguan()
{saomiao[0]=abile[a%1000/100];saomiao[1]=abile[a%100/10];saomiao[2]=abile[a%10];saomiao[3]=0xff;saomiao[4]=0xff;saomiao[5]=0xff;saomiao[6]=0xff;saomiao[7]=0xff;
}
12.c
#include <stc15f2k60s2.h>
#include <12.h>/*******************************************************************************
* º¯ÊýÃû : Delay10us()
* º¯Êý¹¦ÄÜ : ÑÓʱ
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
*******************************************************************************/void Delay10us()
{unsigned char a,b;for(b=1;b>0;b--)for(a=2;a>0;a--);}
/********************************************************************
*º¯ÊýÃû £ºI2cStart()
*º¯Êý¹¦ÄÜ £ºÆðʼÐźţ¬ÔÚSCLʱÖÓÐźÅÔڸߵçƽÆÚ¼äSDAÐźŲúÉúÒ»¸öϽµÑØ
*ÊäÈë £ºÎÞ
*Êä³ö £ºÎÞ
*±¸×¢ £ºÆðʼ֮ºóSDAºÍSCL¶¼Îª0
********************************************************************/
void I2cStart()
{SDA=1; //³õʼ»¯Delay10us();SCL=1;Delay10us(); //½¨Á¢Ê±¼äÊÇSDA±£³Öʱ¼ä>4.7usSDA=0; //²úÉúϽµÑØDelay10us(); //±£³Öʱ¼äÊÇ>4usSCL=0; //Éè¼ÆΪµÍµçƽDelay10us();
}
/********************************************************************
*º¯ÊýÃû £ºI2cStop()
*º¯Êý¹¦ÄÜ £ºÖÕÖ¹Ðźţ¬ÔÚSCLʱÖÓÐźŸߵçƽÆÚ¼äSDAÐźŲúÉúÒ»¸öÉÏÉýÑØ
*ÊäÈë £ºÎÞ
*Êä³ö £ºÎÞ
*±¸×¢ £º½áÊøÖ®ºóSDAºÍSCL¶¼Îª1£¬±íʾ×ÜÏß¿ÕÏÐ
********************************************************************/
void I2cStop()
{SDA=0;Delay10us();SCL=1;Delay10us(); //½¨Á¢Ê±¼ä´óÓÚ4usSDA=1;Delay10us(); //SDA³ÖÐøʱ¼ä´óÓÚ4.7us
}
/*********************************************************************************
*º¯ÊýÃû £ºI2cSendByte(unsigned char num)
*º¯Êý¹¦ÄÜ £ºÍ¨¹ýI2C·¢ËÍÒ»¸ö×Ö·û¡£ÔÚSCLʱÖÓÐźŸߵçƽÆڼ䣬±£³Ö·¢ËÍÐźÅSDC±£³ÖÎȶ¨
*ÊäÈë £ºnum
*Êä³ö £º0»ò1£¬·¢Ëͳɹ¦·µ»Ø1£¬·¢ËÍʧ°Ü·µ»Ø0
*±¸×¢ £º·¢ËÍÍêÒ»¸ö×Ö·ûSCL=0£¬SDA=1
*********************************************************************************/
unsigned char I2cSendByte(unsigned char dat)
{unsigned char a=0,b=0; //×î´ó255£¬Ò»¸ö»úÆ÷ÖÜÆÚΪ1us,×î´óÑÓ³Ù255us¡£for(a=0;a<8;a++) //Òª·¢ËÍ8룬´Ó×î¸ßλ¿ªÊ¼{SDA=dat>>7; //ÆðʼÐźÅÖ®ºóSCL=0£¬ËùÒÔ¿ÉÒÔÖ±½Ó¸Ä±äSDAÐźÅdat=dat<<1;Delay10us();SCL=1;Delay10us(); //½¨Á¢Ê±¼ä>4.7usSCL=0;Delay10us(); //ʱ¼ä´óÓÚ4us}SDA=1;Delay10us();SCL=1;while(SDA) //µÈ´ýÓ¦´ð£¬Ò²¾ÍÊǵȴý´ÓÉ豸°ÑSDAÀµÍ{b++;if(b>200) //Èç¹û³¬¹ý2000usûÓÐÓ¦´ð·¢ËÍʧ°Ü£¬»òÕßΪ·Ç´ðÓ¦£¬±íʾ½ÓÊÜʧ°Ü{SCL=0; Delay10us();return 0;}}SCL=0;Delay10us();return 1;
}
/****************************************************
*º¯ÊýÃû £ºI2cReadByte()
*º¯Êý¹¦ÄÜ £ºÊ¹ÓÃI2C¶ÁÈ¡Ò»¸ö×Ö½Ú
*ÊäÈë £ºÎÞ
*Êä³ö £ºdat
*±¸×¢ £º½ÓÊÜÍêÒ»¸ö×Ö½ÚSCL=0,SDA=1.
****************************************************/
unsigned char I2cReadByte()
{unsigned char a=0,dat=0;SDA=1; //ÆðʼºÍ·¢ËÍÒ»¸ö×Ö½ÚÖ®ºóSCL¶¼µÃ0Delay10us();for(a=0;a<8;a++){SCL=1;Delay10us();dat<<=1;dat|=SDA;Delay10us();SCL=0;Delay10us();}return dat;
}
/*******************************************************************
*º¯ÊýÃû £ºvoid At24c02Write(unsigned char addr,unsigned char dat)
*º¯Êý¹¦ÄÜ £ºÍù24c02µÄÒ»¸öµØַдÈëÒ»¸öÊý¾Ý
*ÊäÈë £ºÎÞ
*Êä³ö £ºÎÞ
*******************************************************************/
void At24c02Write(unsigned char addr,unsigned char dat)
{I2cStart();I2cSendByte(0xa0); //·¢ËÍдÆ÷²ÄµØÖ·I2cSendByte(addr); //·¢ËÍҪдÈëÄÚ´æµØÖ·I2cSendByte(dat); //·¢ËÍÊý¾ÝI2cStop();
}
/*******************************************************************
*º¯ÊýÃû £ºunsigned char At24c02Read(unsigned char addr)
*º¯Êý¹¦ÄÜ £º¶ÁÈ¡24c02µÄÒ»¸öµØÖ·µÄÒ»¸öÊý¾Ý
*ÊäÈë £ºÎÞ
*Êä³ö £ºÎÞ
*******************************************************************/
unsigned char At24c02Read(unsigned char addr)
{unsigned char num;I2cStart();I2cSendByte(0xa0); //·¢ËÍдÆ÷²ÄµØÖ·I2cSendByte(addr); //·¢ËÍÒª¶ÁÈ¡µÄµØÖ·I2cStart();I2cSendByte(0xa1); //·¢ËͶÁÆ÷¼þµØÖ·num=I2cReadByte(); //¶ÁÈ¡Êý¾ÝI2cStop();return num;}
12.h
#ifndef __12_H__
#define __12_H__sbit SCL=P2^0;
sbit SDA=P2^1;void I2cStart();
void I2cstop();
unsigned char I2SendByte(unsigned char dat);
unsigned char I2cReadByte();
void At24c02Write(unsigned char addr,unsigned char dat);
unsigned char At24c02Read(unsigned char addr);#endif
基于stc15f2k60s2芯片单片机编程(EEPROM24C02实验)相关推荐
- 基于stc15f2k60s2芯片单片机编程(时钟DS1302)
**stc15f2k60s2芯片编程(时钟DS1302)** main.c函数 #include <STC15F2K60S2.H> #include <intrins.h> # ...
- 基于stc15f2k60s2芯片单片机编程(数码管)
**蓝桥杯stc15f2k60s2芯片编程(数码管)** ** ** (1)数码管显示01234567 ** ** #include <stc15f2k60s2.h>unsigned ch ...
- 基于stc15f2k60s2芯片单片机编程(串口+超声波)
通过单片机发送当前超声波测量的距离给串口1显示 (感谢广东某大神的帮助) #include <stc15f2k60s2.h> #include <intrins.h>void ...
- 基于stc15f2k60s2芯片单片机编程(闹铃)
用定时器中断写时钟加调节 1)关闭蜂鸣器.继电器等无关外设: 2)设备初始化时钟为 23 时 59 分 50 秒,闹钟提醒时间 0 时 0 分 0 秒. A.时间显示格式 2 3 - 5 9 - 5 ...
- 基于stc15f2k60s2芯片单片机编程(秒表)
用定时器做一个秒表,精确到0.1,S7按下,开始计时,S6按下清零 #include <stc15f2k60s2.h> #include <intrins.h> void Ti ...
- 单片机编程.仿真.实验.工具
2006-05-04 14:26:52 51单片机 <
- 单片机彩灯移动实验_基于构建主义的单片机彩灯实验
基于构建主义的单片机彩灯实验 构建主义主张,学习不是由教师把知识信息简单地传 递给学生,而是要由学生自己主动地构建知识的意义,这种 构建是无法由他人来代替的.可以设想,如果我们的实验总 是先把实验的内 ...
- 单片机c语言实验,单片机实验C语言编程.doc
单片机实验C语言编程.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文档所 ...
- 微型计算机实验报告温度控制,单片机、可编程控制器实验教学大纲.doc
单片机.可编程控制器实验教学大纲.doc 单片机.可编程控制器实验教学大纲 一.实验课的性质与任务 本实验课是在学生学完单片机原理与应用课程之后,为巩固提高所学知识,而安排的一次综合设计实验.通过本实 ...
最新文章
- 网络编程学习笔记(udp_server函数)
- 《软件构架实践》阅读笔记三
- HDU多校2 - 6767 New Equipments(最小费用最大流)
- BZOJ 2124 等差子序列 线段树维护哈希
- “要么你去驾驭生命,要么生命驾驭你。你的心态决定谁是坐骑,谁是骑师。”...
- SM系列国密算法(转)
- php按钮打开文件选择框,在Select file(选择)页面单击Select file(选择文件)按钮
- 对象内存布局 (9)
- HDU 4283 You Are the One(区间DP)
- Python数学建模系列(一):规划问题之线性规划
- 2021广东工业大学837信号与系统真题自编答案
- 高中计算机基础知识课件,高中信息技术基础教案
- 谷歌浏览器误删怎么办
- 微信声音锁会上传到服务器吗,微信声音锁安全吗?微信声音锁可以换吗?
- 程序猿生存指南-7 相亲之路(下)
- mysql distribute by_hive与mysql的数据分区的异同
- android 第三方社区,从友盟微社区看Android第三方SDK架构实践
- 金融计算机怎么调成链式,FRM金融计算器使用方法
- 腾讯企业邮箱免费申请 mail-tencent.com
- 生信自学笔记(五)计分矩阵的实例