大学毕业设报告用纸 第 21 页 共 32 页
变,将d值加一,直到A键放开,将key_a赋值1,如果key_a=1则等待结束;将d值送到BH1415芯片。D的最大值为1080,若高于此数值,则给d赋值为1080送BH1415。
(2)若键B按下,此时表明需要减小频率。首先等待30个程序周期,key_b值不变,将d值减一,直到B键放开,将key_b赋值1,如果key_b=1则等待结束;将d值送到BH1415芯片。D的最小值为880,若低于此数值,则给d赋值为880送BH1415。
查按键函数key(); 加减赋值变量 将send d赋值给dish[]数组 显示send d调频变量值 图5.1主程序流程图
发生一个16位数据到BH1415芯片(其中前11位为频率设定值) 从第一行第三列开始 显示字符“FM:” 调频变量赋值 send d=880 初始化LCD 初始化主程序 开始
大学毕业设报告用纸 第 22 页 共 32 页
如果键B按下,key_b=0。等待30个程序周期;仍然key_b =0,send d减一。等待B键放开;key_b =1。如果key_b =1;等待结束。如果send d小于880,那么send d=880。发送send d值到BH1415芯片 顺序执行完key()
图5.2 key()函数流程图
如果键A按下,key_a =0。等待30个程序周期;仍然key_a =0,send d加一。等待A键放开;key_a =1。如果key_a =1;等待结束。如果send d大于1080,那么send d=1080。发送send d值到BH1415芯片 进行key()函数 5.2 各部分程序 5.2.1初始化主程序
主要是对单片机管脚的定义和对变量的定义及赋初值。变量key_a是对应于按键A的变量,用来记录按键A按下的次数以便计算增加的频率值,用单片机的P1.2口进行位定义;变量key_b是对应于按键B的变量,用来记录按键B按下的次数以便计算减少的频率值,用单片机的P1.3口进行位定义。另外还定义了变量d,用来对调频变量赋值,最终d的值送给BH1415芯片。初始化程序如下:
sbit key_a = P1^2; sbit key_d = P1^3; sbit DI=P3^2; sbit CLK=P3^1; sbit CE=P3^0; uint send_d;
unsigned char fm[]=\
大学毕业设报告用纸 第 23 页 共 32 页 unsigned char disp[]={0,0,0,0,0,0,0}; sbit RS=P2^5; sbit RW=P2^6; sbit E=P2^7; sbit busy=P0^7; unsigned char *s;
5.2.2LCD1602的驱动程序
主要包括对LCD的检测、读并显示、写控制字及初始化。每个功能定义一个函数。 (1)对LCD的检测程序如下:
void delay(uchar i) {
for(;i>0;i--); }
该函数的作用是对LCD进行检测,看LCD是否处于忙的状态。当busy=1时表示忙,此时不可以向LCD进行读写操作;而当busy=0时,表示可以向它读写数据。
(2)对LCD写数据程序如下:
void wait() { P0=0xff;
RW=1; RS=0; do{E=0;E=1;}while(busy==1); }
该函数的作用是向LCD写入数据并显示出来。 (3)向LCD写控制字程序如下:
void dispone(dat) { P0=dat;
RW=0; RS=1; E=0; E=1; wait(); }
该函数的作用是向LCD写入控制字。
void wrcom(com) {
大学毕业设报告用纸 第 24 页 共 32 页 P0=com;
RW=0; RS=0; E=0; E=1; wait(); }
该函数的作用是向LCD写入一串数据,并把数据串显示出来。 (4)LCD初始化程序如下:
void disporm(line,row,unsigned char dat[],i) {
unsigned char com; s=dat; if(line==1){
com=0x80+row-1;
wrcom(com);
while((i--)!=0&&com<=0x8f){
dispone(*s);
com++; s++;
} } else{
com=0xc0+row-1; wrcom(com);
while((i--)!=0&&com<=0xcf){
dispone(*s);
com++; s++;
} } }
5.2.3按键检测 按键检测程序如下:
void key() {
大学毕业设报告用纸 第 25 页 共 32 页 }
if(key_a==0) { }
if(key_d==0) { }
delay(30); if(key_d==0) { }
if(send_d<880)send_d=880; send_16data(send_d);
send_d--; while(key_d==0); delay(30); if(key_a==0) { }
if(send_d>1080)send_d=1080; send_16data(send_d);
send_d++; while(key_a==0);
6 硬件制作注意事项
6.1 布线注意事项
在排板布线的过程中要注意以下问题:
(1)器件的摆放位置要恰到好处,这样可以使作品看起来美观又方便。
(2)在布线的过程中要设置比较合适的间距,这样在印制电路的时候会方便很多。 (3)在走线的时候要注意一些技巧,在没有影响到电路的前提下可以让线从两个管脚间穿过。
(4)需要绕很远的线可以使用跳线来简化布线过程。 6.2 腐蚀电路板注意事项