这是一个单片机控制的收音机程序完整代码和原理图下载地址: http://www.ruidan.com/bbs/dpj-19294-1.html 下面我我截图的一个子程序.
#include "STC12C5620AD.H"#include "EEPROM.H"#include "Channel_Handle.H"/********************** 声明外部变量**************************//********************** EEPROM 存储电台PLL*************************/void EEPROM_Save_PLL(uchar Index,uint Udata){ uchar Temp_H; uchar Temp_L; //PLL转换缓存 uchar EEPROM_H; uchar EEPROM_L; //EEPROM读取缓存 Temp_H=Udata>>8; Temp_L=Udata%256; switch (Index) { case 1: EEPROM_H=EEPROM_Read_Byte(0x00,0x02); //暂存N0.8电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x00,0x03); //暂存N0.8电台PLL高位 EEPROM_Earse(0x00,0x00); //擦除第1扇区 EEPROM_Write_Byte(Temp_H,0x00,0x00); //写入N0.1电台PLL高位 EEPROM_Write_Byte(Temp_L,0x00,0x01); //写入N0.1电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x00,0x02); //写入N0.8电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x00,0x03); //写入N0.8电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 2: EEPROM_H=EEPROM_Read_Byte(0x02,0x02); //暂存N0.9电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x02,0x03); //暂存N0.9电台PLL高位 EEPROM_Earse(0x02,0x00); //擦除第2扇区 EEPROM_Write_Byte(Temp_H,0x02,0x00); //写入N0.2电台PLL高位 EEPROM_Write_Byte(Temp_L,0x02,0x01); //写入N0.2电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x02,0x02); //写入N0.9电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x02,0x03); //写入N0.9电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 3: EEPROM_H=EEPROM_Read_Byte(0x04,0x02); //暂存N0.10电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x04,0x03); //暂存N0.10电台PLL高位 EEPROM_Earse(0x04,0x00); //擦除第3扇区 EEPROM_Write_Byte(Temp_H,0x04,0x00); //写入N0.3电台PLL高位 EEPROM_Write_Byte(Temp_L,0x04,0x01); //写入N0.3电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x04,0x02); //写入N0.10电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x04,0x03); //写入N0.10电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 4: EEPROM_H=EEPROM_Read_Byte(0x06,0x02); //暂存N0.11电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x06,0x03); //暂存N0.11电台PLL高位 EEPROM_Earse(0x06,0x00); //擦除第4扇区 EEPROM_Write_Byte(Temp_H,0x06,0x00); //写入N0.4电台PLL高位 EEPROM_Write_Byte(Temp_L,0x06,0x01); //写入N0.4电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x06,0x02); //写入N0.11电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x06,0x03); //写入N0.11电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 5: EEPROM_H=EEPROM_Read_Byte(0x08,0x02); //暂存N0.12电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x08,0x03); //暂存N0.12电台PLL高位 EEPROM_Earse(0x08,0x00); //擦除第5扇区 EEPROM_Write_Byte(Temp_H,0x08,0x00); //写入N0.5电台PLL高位 EEPROM_Write_Byte(Temp_L,0x08,0x01); //写入N0.5电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x08,0x02); //写入N0.12电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x08,0x03); //写入N0.12电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 6: EEPROM_H=EEPROM_Read_Byte(0x0a,0x02); //暂存N0.13电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x0a,0x03); //暂存N0.13电台PLL高位 EEPROM_Earse(0x0a,0x00); //擦除第6扇区 EEPROM_Write_Byte(Temp_H,0x0a,0x00); //写入N0.6电台PLL高位 EEPROM_Write_Byte(Temp_L,0x0a,0x01); //写入N0.6电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x0a,0x02); //写入N0.13电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x0a,0x03); //写入N0.13电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 7: EEPROM_H=EEPROM_Read_Byte(0x0c,0x02); //暂存N0.14电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x0c,0x03); //暂存N0.14电台PLL高位 EEPROM_Earse(0x0c,0x00); //擦除第7扇区 EEPROM_Write_Byte(Temp_H,0x0c,0x00); //写入N0.7电台PLL高位 EEPROM_Write_Byte(Temp_L,0x0c,0x01); //写入N0.7电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x0c,0x02); //写入N0.14电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x0c,0x03); //写入N0.14电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 8: EEPROM_H=EEPROM_Read_Byte(0x00,0x00); //暂存N0.1电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x00,0x01); //暂存N0.1电台PLL高位 EEPROM_Earse(0x00,0x00); //擦除第1扇区 EEPROM_Write_Byte(Temp_H,0x00,0x02); //写入N0.8电台PLL高位 EEPROM_Write_Byte(Temp_L,0x00,0x03); //写入N0.8电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x00,0x00); //写入N0.1电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x00,0x01); //写入N0.1电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 9: EEPROM_H=EEPROM_Read_Byte(0x02,0x00); //暂存N0.2电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x02,0x01); //暂存N0.2电台PLL高位 EEPROM_Earse(0x02,0x00); //擦除第2扇区 EEPROM_Write_Byte(Temp_H,0x02,0x02); //写入N0.9电台PLL高位 EEPROM_Write_Byte(Temp_L,0x02,0x03); //写入N0.9电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x02,0x00); //写入N0.2电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x02,0x01); //写入N0.2电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 10: EEPROM_H=EEPROM_Read_Byte(0x04,0x00); //暂存N0.3电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x04,0x01); //暂存N0.3电台PLL高位 EEPROM_Earse(0x04,0x00); //擦除第3扇区 EEPROM_Write_Byte(Temp_H,0x04,0x02); //写入N0.10电台PLL高位 EEPROM_Write_Byte(Temp_L,0x04,0x03); //写入N0.10电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x04,0x00); //写入N0.3电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x04,0x01); //写入N0.3电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 11: EEPROM_H=EEPROM_Read_Byte(0x06,0x00); //暂存N0.4电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x06,0x01); //暂存N0.4电台PLL高位 EEPROM_Earse(0x06,0x00); //擦除第4扇区 EEPROM_Write_Byte(Temp_H,0x06,0x02); //写入N0.11电台PLL高位 EEPROM_Write_Byte(Temp_L,0x06,0x03); //写入N0.11电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x06,0x00); //写入N0.4电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x06,0x01); //写入N0.4电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 12: EEPROM_H=EEPROM_Read_Byte(0x08,0x00); //暂存N0.5电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x08,0x01); //暂存N0.5电台PLL高位 EEPROM_Earse(0x08,0x00); //擦除第5扇区 EEPROM_Write_Byte(Temp_H,0x08,0x02); //写入N0.12电台PLL高位 EEPROM_Write_Byte(Temp_L,0x08,0x03); //写入N0.12电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x08,0x00); //写入N0.5电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x08,0x01); //写入N0.5电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 13: EEPROM_H=EEPROM_Read_Byte(0x0a,0x00); //暂存N0.6电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x0a,0x01); //暂存N0.6电台PLL高位 EEPROM_Earse(0x0a,0x00); //擦除第6扇区 EEPROM_Write_Byte(Temp_H,0x0a,0x02); //写入N0.13电台PLL高位 EEPROM_Write_Byte(Temp_L,0x0a,0x03); //写入N0.13电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x0a,0x00); //写入N0.6电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x0a,0x01); //写入N0.6电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 14: EEPROM_H=EEPROM_Read_Byte(0x0c,0x00); //暂存N0.7电台PLL高位 EEPROM_L=EEPROM_Read_Byte(0x0c,0x01); //暂存N0.7电台PLL高位 EEPROM_Earse(0x0c,0x00); //擦除第7扇区 EEPROM_Write_Byte(Temp_H,0x0c,0x02); //写入N0.14电台PLL高位 EEPROM_Write_Byte(Temp_L,0x0c,0x03); //写入N0.14电台PLL低位 EEPROM_Write_Byte(EEPROM_H,0x0c,0x00); //写入N0.7电台PLL高位 EEPROM_Write_Byte(EEPROM_L,0x0c,0x01); //写入N0.7电台PLL低位 EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 break; case 15: EEPROM_Earse(0x0e,0x00); //擦除第8扇区 EEPROM_Write_Byte(Index,0x0e,0x00); //写入电台序号 EEPROM_Write_Byte(Temp_H,0x0e,0x02); //写入N0.15电台PLL高位 EEPROM