主程序来楼,刚学完单片机,格式错误多多
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint key_=0;
uint k_1=0;
uint a_3=0;
uint m1,m_1,m_4;
uint a_4=0;
uint k_2=0;
uint i_1=0;
uint n_0=1;
uint l1=1;
uint l2=1;
uint z,p=1;
uint j_=1;
uint r_i=0x0427;
double b1=0;
uint a1=0;
uint a2=0;
uint FreqTune=0x0000;
uint vol=0xa;
const uchar FmAddr = 0x22;
sbit SDA =P0^0;
sbit SCL =P0^1;
sbit KEY =P1^4;
sbit KEYu=P1^0;
sbit KEYd=P1^2;
sbit KEY1=P1^1;
sbit KEY2=P1^3;
sbit rs=P0^5;
sbit rw=P0^6;
sbit en=P0^7;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
uchar code table[]="0123456789.";
uchar code table_[]="Mhz Vol:";
uchar code table_1[]="RT";
uchar code table1[]="Welcome";
uchar code table2[]="Digital FMdevice";
uchar code table3[]="Please choose";
uchar code table_3[]="s ";
uchar code table4[]="function keys";
uchar code table5[]=" -Interphone ";
uchar code table6[]=" FM receiver ";
uchar code table7[]=" -FM receiver ";
uchar code table8[]=" FM transmitter";
uchar code table9[]=" -FM transmitter";
uchar code table10[]=" Transmit Data ";
uchar code table11[]=" -Transmit Data ";
uchar code table12[]=" Interphone ";
uchar code table14[]="Waiting ";
uchar code table15[]="............... ";
uchar code table16[]=" Interphone ";
uchar code table18[]=" FM RX ";
uchar code table20[]=" FM TX ";
uchar code table22[]=" TX DATA ";
uchar code tabletp[]=" ";
uchar code table23[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,};
uchar code table24[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x02,0x06,0x0E,0x1E,};
uchar code table25[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x1C,};
uchar code table26[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x18,} ;
uchar code table27[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,};
uchar code table28[]={0x00,0x1F,0x0A,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};
uchar code table29[]={0x02,0x06,0x1E,0x1E,0x1E,0x1E,0x06,0x02,};
void Dela_y(uint c) //延时
{
int i=0;
for(i=0;i<c;i++);
}
void DelayIT(uint del_1)//延时 10ms * del
{
uint i,j;
for(i=0; i<del_1; i++)
for(j=0; j<1827; j++)
;
}
void delay_lcd(uint n)//lcd延时
{uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)//lcd写命令
{
rs=0;
rw=0;
P3=com;
delay_lcd(5);
en=1;
en=0;
}
void lcd_wdat(uchar dat)//lcd写数据
{
rs=1;
rw=0;
P3=dat;
delay_lcd(5);
en=1;
en=0;
}
void lcd_init()//lcd初始化
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}
void OpenIIC()
{
SDA = 1;
SCL = 1; Dela_y(5);
SDA = 0; Dela_y(5);
SCL = 0; Dela_y(5);
}
void CloseIIC()
{
SDA = 0 ;
SCL = 1; Dela_y(5);
SDA = 1; Dela_y(5);
SCL = 1; SDA = 1; Dela_y(150); //防止过快的读取造成EPPROM 来不及反应}
}
void IICWriteByte( uchar byte )
{
uchar i=0;
int f=30000;
bit bitdata;
for(i=0;i<8;i++)
{
bitdata=byte>>(7-i) & 1;
SDA = bitdata;
SCL =1; Dela_y(5);
SCL = 0; Dela_y(5);
}
SCL = 1;
while(SDA && -f); Dela_y(5);
SCL = 0; Dela_y(5);
}
void IICWrite(uchar uaddr, uchar romaddr, uint rdata,bit _16b)
{
uchar temp;
OpenIIC();
IICWriteByte(uaddr);
IICWriteByte(romaddr);
if(_16b)
{
temp =(uchar)((rdata>>8) & 0x00ff) ;
IICWriteByte(temp);
}
temp = (uchar) (rdata & 0xff);
IICWriteByte(temp);
CloseIIC();
}
uchar IICReadByte(bit next)
{
uchar buf =0,i=0;
for(i=0;i<8;i++)
{
buf <<=1;
SCL = 1; buf |= SDA; Dela_y(5);
SCL = 0; Dela_y(5);
}
if(next)
{
SDA = 0; SCL = 1; Dela_y(5);
SCL = 0; Dela_y(5); SDA = 1;
}
else
{
SDA = 1; SCL = 1; Dela_y(5);
SCL = 0; Dela_y(5); SDA=0;
}
return buf;
}
uint IICRead(uchar uaddr, uchar ramAddr,bit _16b)
{
uint buf;
OpenIIC();
IICWriteByte(uaddr);
IICWriteByte(ramAddr);
OpenIIC();
IICWriteByte(uaddr | 0x01);
if(_16b)
{
buf = IICReadByte(1);
buf = buf<<8;
buf =buf|IICReadByte(0);
}
else
{
buf = IICReadByte(0);
}
CloseIIC();
return buf;
}
uint FM_ReadReg(uchar regAddr)//读取FM模块的寄存器
{
return IICRead(FmAddr,regAddr,1);
}
void FM_WriteReg(uchar regAddr,uint dat)//写FM模块的寄存器
{
IICWrite(FmAddr,regAddr,dat,1);
}
void FM_SetFreq_RX(uint FreqTune_1)//设置RX频道的频率87-1*,步进频率100k 0x00
{
FM_WriteReg(3,(FreqTune_1<<6) | 0x0010);
}
void FM_SetFreq__RX(uint FreqTune__1)//设置RX频道的频率65-90,步进频率100k 0x00
{
FM_WriteReg(53,0x28a);
FM_WriteReg(53,0x384);
FM_WriteReg(3,(FreqTune__1<<6) | 0x001c);
}
void FM_SetVolume(uint vol_)//设置音量 0x0
{
FM_WriteReg(5,vol_|=0x88a0);
}
void show(uint addr,double m)//lcd显示初始地址addr及数字xxx.x
{
uchar n;
uchar _n=10;
for(n=0;n<5;n++)
{
if(n==0) _n=m/100;
if(n==1) _n=((int)m/10)%10;
if(n==2) _n=(int)m%10;
if(n==3) _n=10;
if(n==4) _n=((int)(m*10))%10;
lcd_wcom(addr+n);
lcd_wdat(table[_n]);
}
}
void show_(uint a_ddr,double k_)//lcd显示初始地址addr及数字xx
{
uchar n;
uchar _n=10;
for(n=0;n<2;n++)
{
if(n==0) _n=(int)k_/10;
if(n==1) _n=(int)k_%10;
lcd_wcom(a_ddr+n);
lcd_wdat(table[_n]);
}
}
void rssi(uint r_addr,int rssi) //LCD信号强度指示显示(地址,0——5)
{
lcd_wcom(0x40);
if(rssi==0)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table28[m1]);
}
};
if(rssi==1)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table27[m1]);
}
};
if(rssi==2)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table26[m1]);
}
};
if(rssi==3)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table25[m1]);
}
};
if(rssi==4)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table24[m1]);
}
};
if(rssi==5)
{
for(m1=0;m1<16;m1++)
{
lcd_wdat(table23[m1]);
}
};
lcd_wcom(r_addr); //显示地址
for(m1=0;m1<2;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(m1);
} ;
}
void kanji()//开机画面
{
uchar m1;
DelayIT(20);
lcd_init(); //液晶初始化
lcd_wcom(0x84); //显示地址
for(m1=0;m1<7;m1++) //将table1[Welcome]中的数据依次写入1602显示
{
lcd_wdat(table1[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table2[Digital FMdevice]中的数据依次写入1602显示
{
lcd_wdat(table2[m1]);
}
DelayIT(100);
lcd_init(); //液晶初始化
lcd_wcom(0x81); //显示地址
for(m1=0;m1<13;m1++) //将table3[Please choose]中的数据依次写入1602显示
{
lcd_wdat(table3[m1]); DelayIT(4) ;
}
lcd_wcom(0x80+0x41); //显示地址
for(m1=0;m1<13;m1++) //将table4[function keys]中的数据依次写入1602显示
{
lcd_wdat(table4[m1]); DelayIT(5) ;
}
DelayIT(50) ;
}
void K_S()//主键盘扫描
{
if(a_3!=1)//有后退按键
{
a_3=1;
if(k_1==0)//对讲机模式
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table5[-Interphone]中的数据依次写入1602显示
{
lcd_wdat(table5[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table6[FM receiver]中的数据依次写入1602显示
{
lcd_wdat(table6[m1]);
}
};
if(k_1==1)//收音机模式
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table12[]中的数据依次写入1602显示
{
lcd_wdat(table12[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table7[]中的数据依次写入1602显示
{
lcd_wdat(table7[m1]);
}
};
if(k_1==2)//FM发射模式
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table6[]中的数据依次写入1602显示
{
lcd_wdat(table6[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table9[]中的数据依次写入1602显示
{
lcd_wdat(table9[m1]);
}
};
if(k_1==3) //第四模式
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table8[]中的数据依次写入1602显示
{
lcd_wdat(table8[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table11[]中的数据依次写入1602显示
{
lcd_wdat(table11[m1]);
}
};
};
if(KEYu==0) key_--;//按键判断
if(KEYd==0) key_++;
if(k_1!=key_%4) //有上下选择按键
{k_1=key_%4;
if(k_1==0)
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table5[]中的数据依次写入1602显示
{
lcd_wdat(table5[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table6[]中的数据依次写入1602显示
{
lcd_wdat(table6[m1]);
}
};
if(k_1==1)
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table12[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table7[m1]);
}
};
if(k_1==2)
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table6[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table9[m1]);
}
};
if(k_1==3)
{
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址
for(m1=0;m1<16;m1++) //将table11[]中的数据依次写入1602显示
{
lcd_wdat(table8[m1]);
}
lcd_wcom(0x80+0x40); //显示地址
for(m1=0;m1<16;m1++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table11[m1]);
}
};
DelayIT(30);
};
} |