新建 文本文档.txt
Upload User: sophiecyc
Upload Date: 2007-10-14
Package Size: 14856k
Code Size: 2k
Category:

SCM

Development Platform:

C/C++

  1. void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
  2. {
  3. while(EECR & (1<<EEWE));   //等待EEPROM的前一个写操作完成
  4. EEAR = uiAddress;  //设置要写入的EEPROM地址
  5. EEDR = ucData;    //设置要写入的数据
  6. EECR |= (1<<EEMWE); //写1到EEMWE位
  7. EECR |= (1<<EEWE);//写1到EEWE位,开始写EEPROM的操作
  8. }
  9. unsigned char EEPROM_read(unsigned int uiAddress)
  10. {
  11. while(EECR & (1<<EEWE));   //等待EEPROM的前一个写操作完成
  12. EEAR = uiAddress;  //设置要读取的EEPROM地址
  13. EECR |= (1<<EERE);//写1到EERE位,开始读取EEPROM的操作
  14. return EEDR;  //返回读取的数据
  15. }
  16. #pragma data:eeprom        //设置数据区到EEPROM
  17. char key[] = {“RADIO”};
  18. char password[] = {“CBC:123456%ABC@163.COM: ABCDEFG$”};
  19. //假设我们用“%”作为密码之间的分割;“$”为密码结束标志
  20. #pragma data:data        //设置数据区回到数据存储器
  21. unsigned char scan_keyboard(void)
  22. {
  23.    unsigned char ctemp;
  24.    unsigned char ctempadd;
  25.    unsigned char creturn;
  26.    PORTC = 0XFF;
  27.    for(ctemp=0;ctemp<4;ctemp++)
  28.    {
  29.       PORTC = ~(1<<ctemp);    //PC0管脚输出低电平
  30.   delay_us(50);           //短延时,等待电平稳定
  31.   ctempadd = PINC&0XF0;   //读取列线状态
  32.   if (ctempadd!=0xf0)      //有按键按下
  33.   {
  34.      delay_ms(100);          //按键消抖
  35.  ctempadd = PINC&0XF0;   //再次读取列连状态
  36.  if (ctempadd!=0xf0)     //按键仍然处于按下状态
  37.  {
  38.     switch (ctempadd)
  39. {
  40.    case 0x70 : ctempadd = (ctemp*4+0); break;
  41.    case 0xb0 : ctempadd = (ctemp*4+1); break;
  42.    case 0xd0 : ctempadd = (ctemp*4+2); break;
  43.    case 0xe0 : ctempadd = (ctemp*4+3); break;
  44. }
  45.  creturn = keytable[ctempadd];  //查表获取键值
  46.  while ((PINC&0XF0)!=0xf0);     //等待按键抬起
  47.  return creturn;  
  48.  }  
  49.   }
  50.       PORTC = 0XFF;   
  51.    } 
  52.    return 0xaa;         //没有按键动作
  53. }