搬家了~~~

今天起博客搬家了 地址是:digfarmer.org  
跳到那边去吧wink

软件 Comments(0) 2013年7月07日 18:29

IP切换 批处理

    最近电脑有问题,一重装电脑就忘了备份这个,又得重新写了,备份一下在博客安全,那都能找到。

@echo off

echo 1.自动获取IP                 2.公司IP     
echo 3.打开WIFI                   4.关闭WIFI
echo 5.重设WIFI                   6.网络承载信息
echo\
set/p input=请输入序号:
if %input%==1 (netsh interface ip set address name="本地连接" source=dhcp
netsh interface ip set dns name="本地连接" source=dhcp
netsh wlan start hostednetwork)

if %input%==2 (netsh interface ip set address name="本地连接" source=static addr=172.16.23.139 mask=255.255.0.0 gateway=172.16.254.11
netsh interface ip set dns name="本地连接" source=static addr=202.101.172.35
netsh interface ip add dns name="本地连接" addr=202.102.172.47 index=2
netsh wlan start hostednetwork)  

if %input%==3 netsh wlan start hostednetwork

if %input%==4 netsh wlan stop hostednetwork

if %input%==5 (netsh wlan set hostednetwork mode=allow ssid=Bruce key=ckbin0088
netsh wlan start hostednetwork)

if %input%==6 netsh wlan show hostednetwork

pause

软件 Comments(0) 2013年1月07日 22:17

WIN7 下 MDK 注册失败

记录一下,这事每次装每次都忘,MDK 出了最新4.6 版本,由于版本控的缘故,就装上了。倒是最后注册不了,还以为TMD 软件增强了加密注册。度娘也没找到答案,倒是早上运行bat的时候要右键“以管理员身份运行” 才记起,在WIN7 下注册MDK 必须“以管理员身份运行”才能注册,这些好了,OK了~~~ 

软件 Comments(0) 2012年12月12日 12:20

开启win7的无线承载网络(转)

无线承载网络(Wireless Hosted Network)是Windows 7和安装有 WLAN 服务的Windows Server 2008 R2中一项新增的WLAN特性。
通过此特性,Windows 计算机能通过一块物理无线网卡以客户端身份连接到(由物理设备提供的)硬AP,同时又能作为软AP,允许其它设备与自己连接.
为了不让有些人叫板说:“这是个伪技巧,XP,vista里也可以实现无线共享啊”,所以我特此申明,XP,vista里利用传统的临时无线网(即Ad Hoc模式)来实现的,临时无线网(即Ad Hoc模式)是一种点对点网络,类似于有线网中的“双机互联”,虽然也能实现互联网共享,但主要用于两个设备临时互联,并且有的设备(如采用Android系统的设备)并不支持连接到临时无线网。还有一个很严重的问题,由于一块无线网卡只能连接到一个无线网络,因此如果通过无线网卡连接到 Internet,就不能再使用这个无线网卡建立临时网络,共享 Internet 了。而无线承载网络的原理就不一样了。它是通过把物理网卡虚拟一块虚拟网卡,从而模拟软AP的功能。所以当你物理网卡连在真正的无线路由时,可以通过模拟的软AP(软路由)供其他电脑上网。

第一,一管理员身份运行命令提示符(开始菜单——所有程序——附件,找到命令提示符,右键单击它,选择“以管理员身份运行”,在弹出的用户控制窗口中单击“是”。然后输入命令:

netsh wlan show drivers
如果“支持的网络承载”一栏为“是”,那么你的网卡使用“软AP”功能。


第二,输入如下命令,启用并设定“虚拟Wifi网卡”模式:
netsh wlan set hostednetwork mode=allow ssid=”shadowhack” key=88888888

其中
Mode:是否启用虚拟Wifi网卡,改为disallow则为禁用,虚拟网卡即会消失。
Ssid:指定无线网络的名称,最好为英文。
Key:指定无线网络的密码。该密码用于对无线网进行安全的WPA2加密,能够很好的防止被蹭网。

以上三个参数其实可以单独使用,例如只使用 mode=disallow 可以直接禁用虚拟Wifi网卡。

 

3. 启用“Internet连接共享(ICS)”
为了与其他计算机或设备共享已连接的互联网,我们需要启用“Internet连接共享”功能。打开“网络和网络共享中心”窗口——“更改适配器设置”,右键单击已连接到Internet的网络连接,选择“属性”,切换到“共享”选项卡,选中其中的复选框,并选择允许其共享Internet的网络连接在这里即我们的虚拟Wifi网卡

4. 开启无线网络

继续在命令提示符中运行以下命令:
netsh wlan start hostednetwork
即可开启我们之前设置好的无线网络(相当于打开路由器的无线功能。同理,将start改为stop即可关闭该无线网)。


软件 Comments(8) 2012年8月29日 10:28

24Cxx 系列EEPROM程序

    关于I2C 学习的时候介绍得最多的就是24C02 这里存储EEPROM了,但学的时候基本只是讲讲简单的I2C 的总线数据传输而已,即使先gooogle上搜索也绝大部分这这样的文章,很少有说到如何在实际情况中如何使用的程序。

    24Cxx系列数据块存储时也是比较讲究的,

图为 几类不同容量的芯片的存储空间结构,24C16以下空间的大于8位后的寻址高位地址在片选地址中选择,详细看芯片手册。另外要注意的就是字节页,一次连续写入的数据量不能超过一页的数据量。有些老款的芯片甚至不支持跨页写入。为了适用也参照不跨页写入的方法写这个程序。而读取数据没有这个限制,只要单片机开辟的缓存够大,可以一直连续读下去。

/*****24Cxx Seriel EEPROM*************************/
#define EEPROM 8    
/**此处定义适用的芯片型号****/
/********
01 -> 24C01;   02 -> 24C02;  04 -> 24C04;   08 -> 24C08;
16 -> 24C16;   32 -> 24C32;  64 -> 24C64;   128 -> 24C128;
256-> 24C256;  512 -> 24C512;  
*/

#if EEPROM==1
   #define PAGE_SIZE           8
   #define EE_SIZE             0x007F
#elif EEPROM==2
   #define PAGE_SIZE           16 
   #define EE_SIZE             0x00FF
#elif EEPROM==4
   #define PAGE_SIZE           16
   #define EE_SIZE             0x01FF
#elif EEPROM==8
   #define PAGE_SIZE           16
   #define EE_SIZE             0x03FF
#elif EEPROM==16
   #define PAGE_SIZE           16
   #define EE_SIZE             0x07FF
#elif EEPROM==32
   #define PAGE_SIZE           32
   #define EE_SIZE             0x0FFF
#elif EEPROM==64
   #define PAGE_SIZE           32
   #define EE_SIZE             0x1FFF
#elif EEPROM==128
   #define PAGE_SIZE           64
   #define EE_SIZE             0x3FFF
#elif EEPROM==256
   #define PAGE_SIZE           64
   #define EE_SIZE             0x7FFF
#elif EEPROM==512
   #define PAGE_SIZE           128
   #define EE_SIZE             0xFFFF
#endif
 

头文件可以写成预编译模式,方便移植后修改,PAGE_SIZE为一页的存储量,EE_SIZE为芯片的存储量,而后一些程序的判断也根据选择的存储芯片来判断。
顶层用于外部程序调用的函数只有两个,读和写两个情况而已

 unsigned char EEPROM_Write(unsigned char* pBuffer,unsigned int WriteAddress,unsigned char NumbyteToWrite);
 unsigned char EEPROM_Read(unsigned char* pBuffer,unsigned int ReadAddress,unsigned char NumbyteToWrite);

传递函数有三个:
pBuffer:要存储或读出来的数据所在的变量存储区字符串头指针;
WriteAddress/ReadAddress:要存入EEPROM所在的存储空间的第一个存储空间地址;
NumbyteToWrite:数据写入或读出的字节个数;
这样的应用比较简单 例如在头文件中分配了两类数据的存储空间起始地址DATA1、DATA2
#define DATA1  0x0010
#define DATA2  0x0050
存储数据所在缓存 EE_Buffer[20],应用程序如下写法:
EEPROM_Write(EE_Buffer,DATA1,20);
这样EE_Buffer内的数据便被写入EEPROM中 0x10~0x30 的数据存储空间中了。
合理的分配陪EEPROM 的存储空间对数据管理非常重要。甚至于可以作为一个小型黑匣子一样。

unsigned char EEPROM_Write(unsigned char* pBuffer,unsigned int WriteAddress,unsigned char NumbyteToWrite)
{
  unsigned char TempBuffer,Temp2Buffer;
  if((WriteAddress+NumbyteToWrite) > EE_SIZE) //判断是否超出存储空间
    {
      return 0;
    }
  else
    {
      IIC_WriteBuffer(pBuffer,WriteAddress,NumbyteToWrite);
      IIC_WriteBuffer(pBuffer,WriteAddress,NumbyteToWrite);// 连续写入两次避免因EMC等因素造成的写入失败情况

      IIC_ReadBuffer(&TempBuffer,WriteAddress+NumbyteToWrite-1,1);//读取eeprom 的数据与缓存中的数据对比 相同为确认写入成功
      Temp2Buffer=*(pBuffer+NumbyteToWrite-1);
      if(TempBuffer==Temp2Buffer)
         return 1;
      else
	return 0;
    }
}

unsigned char EEPROM_Read(unsigned char* pBuffer,unsigned int ReadAddress,unsigned char NumbyteToWrite) 
{
  if((ReadAddress+NumbyteToWrite) > EE_SIZE) 
    {
      return 0;
    }
  else
    {
      IIC_ReadBuffer(pBuffer,ReadAddress,NumbyteToWrite);
      IIC_ReadBuffer(pBuffer,ReadAddress,NumbyteToWrite);
      return 1;
    }
}

接下来的是是IIC_ReadBuffer、IIC_WriteBuffer,两个函数主要是对存入数据的处理,如页面内写入,超过页面数量的数据处理等,我这里把函数定义为static 函数只能对内部应用,外部只能调用上面的两个函数,累似于API函数一样,这也可以避免不必要的程序调用书写。IIC_ReadBuffer函数相对简单,因为读取没有对页面的限制,可以无限制的读下去。

static   void IIC_ReadBuffer(unsigned char* pBuffer,unsigned int ReadAddress,unsigned char NumbyteToWrite);
static   void IIC_WriteBuffer(unsigned char* pBuffer,unsigned int WriteAddress,unsigned char NumByteToWrite);
void IIC_ReadBuffer(unsigned char* pBuffer,unsigned int ReadAddress,unsigned char NumbyteToWrite)
{
//  u8 NumOfPage=0,NumOfSingle=0;count=0 Part=0,
  u8 PageAddress=0;
  /******pageAddress is over 8bit***********/
#if EEPROM < 32
  PageAddress=(u8)(ReadAddress>>7)&0x0E|ReadAddress_EEPROM;
#else
  PageAddress=WriteAddress_EEPROM;
#endif 

 IIC_ReadPage(pBuffer,PageAddress,ReadAddress,NumbyteToWrite); 
}
读取缓存的函数只对地址做一下判断即可。写入函数较为复杂,需判断数据起始存储地址 和页等关系
void IIC_WriteBuffer(unsigned char* pBuffer,unsigned int WriteAddress,unsigned char NumByteToWrite)
{
  u8 NumOfPage=0,NumOfSingle=0; //,count=0
  u16 Part=0;//
  u8 PageAddress=0;

  /******pageAddress is over 8bit***********/
  /******判断存储地址是否超过8位************/
#if EEPROM < 32
  PageAddress=(u8)(WriteAddress>>7)&0x0E|WriteAddress_EEPROM;
#else
  PageAddress=WriteAddress_EEPROM;
#endif 


  /*******判断起始地址与跨页地址的字节个数******/
  Part=WriteAddress/PAGE_SIZE;
  if(Part!=0)
    {
      Part=PAGE_SIZE*(Part+1)-WriteAddress;      
    }
  else 
    {
      Part=PAGE_SIZE-WriteAddress;
    }

 
  if(Part >= NumByteToWrite) /***写入的数据个数小于跨页剩余的个数可直接写入 ***/
    {
      IIC_WritePage(pBuffer,PageAddress,WriteAddress,NumByteToWrite);
    }
  else                       /***1.写入的数据个数大于跨页剩余的个数先把剩余的跨页个数填充满 ***/
    {
      NumOfPage = (NumByteToWrite-Part)/PAGE_SIZE;  
      NumOfSingle = (NumByteToWrite-Part)%PAGE_SIZE;   
      pBuffer = IIC_WritePage(pBuffer,PageAddress,WriteAddress,Part);
    
      NumByteToWrite -= Part;
      WriteAddress += Part;

      while(NumOfPage--)       /***2.按计算的数据量占页面数,连续写入页面*******/
	{     
	  pBuffer = IIC_WritePage(pBuffer,PageAddress,WriteAddress,PAGE_SIZE);

	  WriteAddress += PAGE_SIZE;
	  //  pBuffer += PAGE_SIZE;
	}   
      if(NumOfSingle!=0)      /***3.补充页面写完后超出的不足一页数据量的数据***/
	{
	  IIC_WritePage(pBuffer,PageAddress,WriteAddress,NumOfSingle);
	 
	}
    }
}

剩下的是IIC_WritePage()、IIC_ReadPage()两个函数是芯片的IIC通讯底层函数,根据单片机的IIC通讯模式写入即可。以上的程序可通用到任何24Cxx 系列所应用的程序。


软件 Comments(63) 2012年8月16日 14:25