📄 24c02存储单元内容检测.c
字号:
/***********************************************
Function:
--------------------------------------------
| 7-Segled dynamic display and EEPROM 24C02 |
--------------------------------------------
| 定时+中断+进制转换+移位+LED显示+EEPROM 存储|
--------------------------------------------
Author: micxwp
Date: 07/30/07
Ver: 0.0.1
Copyright: HA@ Co, LTD
***********************************************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit P1_3 = P1^3;
uchar knock;
uchar data dis_digit;
uchar data dis_index;
uchar code led_tab[]={0x14,0xbe,0x85,0x86,0x2e,0x46,0x44,0xb6,0x04,0x06, //0~9
0x24,0x4c,0x55,0x8c,0x45,0x65,0xfb,0xff,0xef}; //A-F,dot,off,-
uchar dis_buf[8]; //数码管各位显示缓存
uint time_refresh; // 用于刷新显示和定时存储写入次数的定时器变量
uint value;
extern char Read_One_Byte(unsigned char addr);
void tiemr0(void ) interrupt 1 using 1 // 要尽量减少中断服务程序的内容和长度
{
TH0 = 0xfc;
TL0 = 0x17;
P2 = 0xff; // 先关闭所有数码管
P0 = dis_buf[dis_index]; // 显示代码传送到P0口
P2 = dis_digit; //
dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管
dis_index++; //
dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
time_refresh++;
}
void main()
{
uchar i,knock;
uchar value;
uint second;
P0=0xff;P2=0xff;
//P1=0xff;
TMOD=0x01; // T0工作于计数方式1,T1工作于定时方式1;
TH0=0xfc;
TL0=0x17; // 开启T0计数;
IE=0x82;TR0=1;
dis_digit = 0xfe;
dis_index = 0;
for (;;)
{
if( P1_3==1 && dis_digit==0xfd)
{ knock++;
if(knock>10) knock=0;
}
switch(knock)
{
case 0:{second=2000;}break;
case 1:{second=1750;}break;
case 2:{second=1500;}break;
case 3:{second=1250;}break;
case 4:{second=1000;}break;
case 5:{second=750;}break;
case 6:{second=500;}break;
case 7:{second=300;}break;
case 8:{second=200;}break;
case 9:{second=100;}break;
case 10:{second=50;}break;
default:break;
}
if (time_refresh>=second)
{
time_refresh=0;
i++;
if(i>=256){i=0;}
value = Read_One_Byte(i); // 显示EEPROM 数值
dis_buf[7]=led_tab[value%16];
dis_buf[6]=led_tab[value/16];
dis_buf[5]=led_tab[17];
dis_buf[4]=led_tab[17];
dis_buf[3]=led_tab[18]; // 显示EEPROM 地址
dis_buf[2]=led_tab[18];
dis_buf[1]=led_tab[i/16];
dis_buf[0]=led_tab[i%16];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -