⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c02存储单元内容检测.c

📁 精确定时+中断+进制转换+移位+LED显示+按关键加速+EEPROM 存储测试
💻 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 + -