大学电子工程实习报告

上传人:痛*** 文档编号:42648492 上传时间:2021-11-27 格式:DOC 页数:40 大小:861.02KB
收藏 版权申诉 举报 下载
大学电子工程实习报告_第1页
第1页 / 共40页
大学电子工程实习报告_第2页
第2页 / 共40页
大学电子工程实习报告_第3页
第3页 / 共40页
资源描述:

《大学电子工程实习报告》由会员分享,可在线阅读,更多相关《大学电子工程实习报告(40页珍藏版)》请在装配图网上搜索。

1、中国地质大学(武汉) 课 程: 电子工程实习报告 学 号: 班 级: 姓 名: 指导老师:陈分雄、叶敦范、罗大鹏、杨勇、王勇目 录第一阶段 软件使用与仿真31.1 单片机系统原理图绘制31.2 PCB制板31.3 编程训练4第二阶段 焊接电路板182.1单片机最小系统板焊接 18第三阶段 电路调试与程序设计183.1 电路调试及功能测试183.2 蜂鸣器调试193.3 串口通信调试 193.4 液晶显示调试193.5 数码管及键盘控制调试203.6 系统综合功能设计20附录21实习小结38第一阶段 软件使用与仿真1.1单片机系统原理图绘制(指导老师:罗大鹏)1.地点:信息楼5032.目的:熟练

2、掌握protel99的使用方法,绘制单片机最小系统原理图,且保证ERC校验无误,并生成网络报表3.内容:文件管理先新建设计数据库,再在数据库中新建各种文件,主要用到Schematic Document和PCB Document。在使用中学会及时保存原理图或PCB文件以及熟练文件的导入导出。protel的绘图方法 通过学习掌握绘图的一些方法。要对键盘上的快捷键熟练应用,比如:把原理图的放大Page UP,缩小Page Down,追踪鼠标视野Home,删除Delete,空格键转换元件以及撤销选择区域X-A等。元器件或区域的复制,粘贴,删除等。熟悉界面中的工作条功能。绘制原理图首先添加元件库,包括自

3、制元件和下载的元件库,加上protel自带的元件库。把需要用到的元件在自定义合适大小的图纸上合理摆布,再用导线把各器件连接起来,注意各电源及接地符号,节点,总线等的设置方法,使用绘图工具实现文字注释或其他注释。ERC校验待原理图绘制完毕,然后进行电气法则测试,即ERC校验,若产生错误,则根据错误提示对原电路图进行修改,直至通过ERC校验,原理图无误。修改元器件封装当ERC校验无错时,然后对照元件清单及PCB元件库,对每一个元器件封装进行修改,产生元件清单。修改器件封装,修改其属性中的footprint即可。修改完以后,再进行一次ERC校验,若出现错误,则根据错误提示修改,直至能通过ERC校验无

4、错误产生。生成网络报表待修改封装之后,并再次通过ERC校验无错误产生,生成网络报表。然后对照原电路图把网络报表仔细检查一遍,检查每一个器件与其他器件间的连接是否有误,及是否有元器件的丢失,检查VCC与GND的连接,是否全部连上。若有遗漏或错误,则返回修改,在进行ERC校验,生成网络报表,直至无遗漏和错误。此工作非常繁琐,需耐心和仔细对待。 但由于前些工作比较仔细所以原理图基本没有太大错误。原理图见附录1。1.2PCB制板1.地点:信息楼5032.目的:熟练掌握protel99的使用方法,绘制单片机最小系统原理图3.内容:新建PCB文件,并添加老师要求的PCB元件库。导入网络报表导入上一阶段产生

5、的网络报表,在导入过程中会进行错误检查,若产生错误,则需返回上一阶段,根据错误提示,修改元器件的封装等等,然后按步骤生成网络报表,再次导入网络报表,直至导入无错误。手工布局在PCB图纸上KeepOutLayer层放置线定义板宽,在导入网络报表无错误之后,然后执行,在将导入的各元器件进行布局摆放,其中键盘按照矩阵形式排列,我们所用的是16个键,按44矩阵进行排列,其中外部扩展及下载口及电源及串口等等器件应放置在PCB板边缘,在元件布局应按原理图的各个模块的具体分布进行,把每一模块的各器件尽量摆放在一起,并标注各个模块,再逐步调整,使所用PCB板面积尽量小,利用效率最大。自动布线及手工改动首先设计

6、规则,主要是电线宽度,孔大小约束。待手工布局结束后,进行自动布线,自动布线结束后,仔细检查布线效果,布线应遵循导线走钝角,线尽量走近路,尽量保证TopLayer层走横线,BottomLayer层走竖线。然后去掉自动布线所产生的毛刺,修改走直角或锐角的连线,并使线程尽量短。此过程中应逐个局部仔细检查修正。修正结束后,可以对PCB添加泪滴焊盘,进行覆铜或放置汉字,防止实际硬件电路静电干扰。 PCB板见附录2。设计规则检查对已经布局布线的PCB图进行设计规则检查,对PCB图进行查错,以保证其正确无误。观看3D图 单PCB图画好后,可以观看其3D效果图,以验证其布局布线合理,和提前知晓制成板后的效果。

7、 PCB3D效果图见附录3生成PCB报表最后可以生成PCB报表,包括电路板状态信息报表,引脚信息报表,元件信息报表,网络分析信息报表等,以对板子有个清晰的认识。1.3、编程训练:(指导老师:杨勇)(一 )熟悉keil软件的使用和仿真步骤Keil集成开发软件基本操作1、 新建一个项目文件2、 首先点击 Keil uVision2 ,进入uVision2界面。点击工具栏Project选项中的NewProject,准备开始建立自己的项目3、 输入工程文件名称,并选择保存工程文件的目录。 4、 为项目文件选择一个目标器件(如AT89C51),如图所示。 5、 用鼠标对项目工作区的目标1,点击右键在弹出

8、的菜单中选择“为目标目标1设置选项”如下图所示。 6、 在“为目标目标1设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的设置选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。7、 点击“文件/新建”创建源程序文件并输入程序代码。8、 在文本框中输入原程序9、 点击“文件/保存“对程序进行保存。 10、 用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示: 11、 在弹出的添加文件框中,选择需要添加到项目中的文件。 12、 点击编译连接的图标,对项目文件进行编译13、

9、 点击“调试/启动/停止调试”进入调试界面若要查看内存中的数据,点击“视图/存储器窗口” (二)实训100例部分LED显示#include sbit led=P32;void delay_ms(unsigned char x_ms)unsigned char i;while(x_ms-)for(i=124;i0;i-)void main(void)while(1)led=1;delay_ms(100);led=0;delay_ms(100);3.7 8只数码管滚动显示单个数字#include#include#define uchar unsigned char#define uint unsi

10、gned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);void main()uchar i,k=0x80;while(1)for(i=0;i8;i+)P2=0xFF;k=_crol_(k,1);P0=DSY_CODEi;P2=k;DelayMS(300);3.8 8只数码管显示多个不同字符#include#include#define uchar unsigned char#defin

11、e uint unsigned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void DelayMS(uint x)uchar i;while(x-) for(i=0;i120;i+);void main()uchar k,m=0x80;P0=0xff;P2=0x00;while(1)for(k=0;k8;k+)m=_crol_(m,1);P2=m;P0=DSY_CODEk+1;DelayMS(2);3.35 定时器控制数码管动态显示#include#include#define uchar

12、unsigned char#define uint unsigned intuchar code DSY_CODE=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF;uchar code Table_OF_Digits8=0,9,10,1,2,10,2,5,2,1,10,5,7,10,3,9;uchar i=0,j=0;uint t=0;void main()P3=0x80;TMOD=0x00;TH0=(8192-4000)/32;TL0=(8192-4000)%32;IE=0x82;TR0=1;while(1);void DSY_S

13、how() interrupt 1TH0=(8192-4000)/32;TL0=(8192-4000)%32;P3=_crol_(P3,1);P0=DSY_CODETable_OF_Digitsij;j=(j+1)%8;if(+t!=350) return;t=0;i=(i+1)%2;3.42 报警器和旋转灯#include#include#define uchar unsigned char#define uint unsigned intsbit SPK=P37;uchar FRQ=0x00;void delayms(uint ms)uchar i;while(ms-) for(i=0;i

14、120;i+);void main()P2=0x00;TMOD=0x11;TH0=0x00;TL0=0xFF;IT0=0;IE=0x8B;IP=0x01;TR0=0;TR1=0;while(1)FRQ+;delayms(1);void EX0_INT() interrupt 0TR0= !TR0;TR1= !TR1;if( P2=0x00)P2=0xE0;else P2=0x00;void T0_INT() interrupt 1TH0=0xFE;TL1=FRQ;SPK=SPK;void T1_INT() interrupt 3TH1=-45000/256;TL1=-45000%256;P2=

15、_crol_(P2,1);4.12 1602字符液晶滚动显示程序#include REG51.h#include intrins.h /包含此头文件可直接操作内核的寄存器以及一些定义好的宏/ this file for MCU I/O port or the orthers hardware config/ for LCD Display/ Define for the port use by LCD Driversbit LCD_EP=P27;sbit LCD_RW=P26;sbit LCD_RS=P25;#define LCD_Data_BUS_Out P0#define LCD_Data

16、_BUS_In P0code unsigned char LCD_InitialCode=0x30,0x30,0x30,0x38,0x01,0x06,0x0c;void LCD_DataWrite(unsigned char Data)unsigned int Read_Dat=0;LCD_EP = 0; /EP、RS端口为低,RW为高LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否

17、可进行读写操作LCD_RW = 0; /EP RW to LowLCD_RS = 1; /RS HightLCD_Data_BUS_Out = Data;LCD_EP = 1; /EP to HightLCD_EP = 0; /EP to lowvoid LCD_RegWrite(unsigned char Command)unsigned int Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS

18、_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否可进行读写操作LCD_RW = 0; /RW to Low,表为写指令LCD_Data_BUS_Out = Command;LCD_EP = 1; /EP to HightLCD_EP = 0;unsigned char LCD_DataRead(void)unsigned char Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;doLCD_Data_BUS_In = 0xff;LCD_EP = 1;Read_D

19、at = LCD_Data_BUS_In&0x80;LCD_EP = 0;while(Read_Dat!=0); /读状态字并判断是否可进行读写操作LCD_RS = 1; /RS置高,表为读数据LCD_EP = 1; /EP to HightRead_Dat = LCD_Data_BUS_In; /读出数据LCD_EP = 0;return Read_Dat;unsigned char LCD_StatusRead(void)unsigned char Read_Dat=0;LCD_EP = 0; /EP、RS置低,RW置高,表为读状态字LCD_RS = 0;LCD_RW = 1;LCD_Da

20、ta_BUS_In = 0xff;LCD_EP = 1;Read_Dat = LCD_Data_BUS_In; /读状态字LCD_EP = 0;return Read_Dat;include #define lcdport P0#define H 1#define L 0sbit lcdrs = P20;sbit lcdrw = P21;sbit lcden = P22;void delay_ms(unsigned char xms)unsigned char i;while(xms-)for(i=125;i0;i-)void lcd_write_data(unsigned char dat)

21、lcdrs = H;lcdrw = L;lcden = L;lcdport = dat;lcden = H;delay_ms(2);lcden = L;void lcd_write_command(unsigned char com)void lcd_init(void)验收:用1602实现两行显示并闪烁#include#define lcdport P0sbit lcdrs = P20;sbit lcdrw = P21;sbit lcden = P22;void delay_ms(unsigned int ms) int i; while(ms-) for(i=125;i0;i-) void

22、 write_data(unsigned char dat) lcdrs=1; lcdrw=0; lcden=0; lcdport=dat; lcden=1; delay_ms(2); lcden=0;void write_command(unsigned char c) lcdrs=0; lcdrw=0; lcden=0; lcdport=c; lcden=1; delay_ms(2); lcden=0;void lcd_busy() do lcdrs=0; lcdrw=1; lcden=0; lcden=1; delay_ms(1); while(lcdport&0x80); lcden=

23、0;void init_lcd1602() write_command(0x38); write_command(0x01); write_command(0x06); write_command(0x0c); void main() init_lcd1602(); while(1) lcd_busy(); write_command(0x80+0x06); write_data(w); delay_ms(10); write_command(0x80+0x07); write_data(e); delay_ms(10); write_command(0x80+0x09); write_dat

24、a(a); delay_ms(10); write_command(0x80+0x0a); write_data(r); delay_ms(10); write_command(0x80+0x0b); write_data(e); delay_ms(10); write_command(0x80+0x47); write_data(y); delay_ms(10); write_command(0x80+0x48); write_data(o); delay_ms(10); write_command(0x80+0x49); write_data(u); delay_ms(10); write

25、_command(0x80+0x4a); write_data(n); delay_ms(10); write_command(0x80+0x4b); write_data(g); delay_ms(10); write_command(0x0c); delay_ms(10); write_command(0x08); delay_ms(10);第二阶段 焊接电路板(指导老师:王勇 叶敦范 )2.1单片机最小系统板焊接1.地点:信息楼4052.目的:完成电路板和JTAG下载线的硬件焊接3.内容:(1)首先对照元件清单和电路图,检查器件是否完整,型号规格安装是否正确。(2)然后将各器件根据焊接规

26、则焊接到电路板上,其中对于器件的摆放方向和位置需十分注意。先焊发热器件电阻和较低的电容,再焊较大的器件(3)而后,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序进行焊接,焊接结束后,自行组装。第三阶段 电路调试与程序设计 (指导老师:陈分雄 王勇 叶敦范 )3.1电路调试及功能测试1.地点:信息楼5032.目的:检查已经焊好的电路板和JTAG下载线是否无误3.内容:先用万用表检查电路板焊接是否都正确。当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮,是否有器件过热,有可能二极管或三极管会在焊接

27、的过程中被烧坏,那样的话就要重新焊器件。再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。3.2蜂鸣器调试1.目的:主要是检验程序能否下载到芯片,蜂鸣器能正常工作,掌握程序的编译下载到芯片的方法。2.内容:在Keil环境中用C语言编写简单是蜂鸣器程序或音乐播放程序。对Keil软件和程序下载软件进行相关配置设置。将编译产生的hex文件下载到芯片,检测其工作是否正常,若工作不正常,则从软件及硬件两方面进行检查。 有用的报警声程序见附录33.3串口通信调试1.地点:信息楼5032.目的:实现计算机与单片

28、机之间相互通讯功能3.内容:将编写的串口调试程序经过编译,下载到单片机。串口实现功能为在计算机上能显示单片机的输出。检测串口是否能正常工作,此阶段需用到串口软件及串口线。若不能正常工作,则需从软件和硬件两方面进行检查。正确功能为在电脑超级终端不停显示输出内容,与预期相同,工作正常。串口调试程序见附录43.4液晶显示调试1.地点:信息楼5032.目的:保证液晶屏LCD能正常工作,输出效果有所扩展。3.内容:在编写程序前,认真阅读LCD液晶屏资料,掌握LCD1602及1602液晶模块数据手册(中文)中的液晶的使用和编程方法,了解其工作时序,及各个指令及初始化。对照电路图中LCD连接情况,编写LCD

29、1602移动显示程序,经编译下载至单片机,检测输出,若无输出,则调整电位器,若仍无输出则从软件及硬件两方面进行检查,找出错误原因,直至液晶屏能正常工作。在程序编写时应时刻注意各个指令间的延时控制。以保证液晶屏呈现效果移动循环显示,液晶屏工作正常。之后也可用LCD做数字钟,这将在综合程序里被用到,液晶移屏显示程序见附录53.5数码管及键盘控制调试1.地点:信息楼5032.目的:保证数码管能正常显示,以及按键能控制数码管的显示3.内容:在编写程序前,应认真阅读LED和ZLG7289A资料,了解和掌握其工作时序,及各个指令及初始化,在程序编写时应时刻注意各个指令间的延时控制。对照电路图中ZLG728

30、9模块的连接情况,编写程序,经过编译,然后下载到单片机,检测展现效果,是否与程序预期相同。实现效果逐个闪烁,逐个消隐,键盘控制改变数据并移动,与预期相同,工作状态正常。再利用单片机内部时钟中断,编写数码管时钟程序,使数码管能够实现计时功能,键盘能够控制时分秒。数码管显示及键盘控制程序见附录63.6系统综合功能设计1.地点:信息楼5032.目的:综合单片机开发板上的各个功能模块,以实现一个完整的系统功能3.内容:根据前面对各模块功能的理解和程序编写,结合各个模块实现一个整体系统,把各模块功能综合起来。设计一综合系统。系统设计程序见附录7。验收程序设计:仿手机按键 如图功能概述:1,LED:12个

31、按键仿手机按键(按“按键”一下LED显示对应的数字,按两下显示后面的字母,以此类推2,蜂鸣器:有按键按下则响一下3,数码管部分:0,1位置显示按下的按键的对应键值附录附录1:附录2:附录3:#include #define uchar unsigned charsbit BUZZ=P33;void delay()uchar i;for(i=0;i1000;i+)main()while(1)BUZZ=0;delay();BUZZ=1;delay();附录4:#include #include #ifdef MONITOR51 char code reserve 3 _at_ 0x23;#endi

32、fvoid main (void) unsigned int i=100;#ifndef MONITOR51SCON = 0x50;TMOD |= 0x20; TH1 = 0xE6; TR1 = 1; TI = 1; #endifwhile (i-) printf(%d,i); printf (Hello everyonen); while(1);附录5:#include unsigned char codedispcode1=happy birthdy!; /要显示的字符串unsigned char codedispcode2=happy everyday!;unsigned char i,

33、j,k,l;sbit RS=P20; /IO口定义sbit RW=P21;sbit E=P22;void delay() /延时函数 for(l=0;l=100;l+);void LCD_cmd(unsigned char cmd)/写指令函数P0=cmd;RS=0;RW=0;E=0;delay();E=1;void LCD_dat(unsigned char dat) /写数据函数 P0=dat;RS=1;RW=0;E=0;delay();E=1;void LCD_table(unsigned char table,int n) /写字符串函数int i=0;for(i=0;in;i+)LC

34、D_dat(tablei);void initializtion() /初始化函数LCD_cmd(0x01); LCD_cmd(0x38); LCD_cmd(0x0f); LCD_cmd(0x06);void main() initializtion(); LCD_cmd(0x80); LCD_table(dispcode1 ,16); LCD_cmd(0xc0); LCD_table(dispcode2 ,16);附录6: #includesbit CS=P10; /IO定义sbit CLK=P11;sbit DIO=P12;sbit INT=P32;void delay(unsigned

35、int n)while(n-); void write(char dat)int t=8;doDIO= (bit)(dat & 0x80);dat=1; CLK=1;delay(30);CLK=0; delay(30);while(-t!=0) ;char read() char dat; int t=8; DIO=1; do CLK = 1;delay(50); dat 2 ) mod = 2;d1 = ModDatmod;x &= 0x07;d1 |= x;d2 = dat & 0x7F;if ( dp ) d2 |= 0x80;cmd_dat(d1,d2); /下载数据并且按方式0 进行

36、译码char key() /读按键值的函数char key;CS = 0;delay(200);write(0x15);delay(200);key = read();CS = 1;delay(100);return key;void keydisp() /数码管显示按键的函数char k,dat;char i=150;while(i)if ( INT = 0 ) /有键按下k = key();switch(k)case 10:cmd_dat(0x88,0);break;/闪烁 case 11:cmd_dat(0x88,0xff);break;/ 去闪烁case 12:cmd(0xa1);br

37、eak;/ 右移case 13:cmd(0xa0);break;/ 左移case 14:cmd_dat(0x98,0xaa);break;/ 消影case 15:cmd_dat(0x98,0xff);break;/ 显示default: cmd(0xa2); Download(1,3,0,k); /显示09 while ( !INT ); i-=1; void init()/初始化函数unsigned char x;CS = 1;CLK = 0;DIO = 1;INT = 1;for ( x=0; x8; x+ ) /点亮所有数码管/Download(1,x,1,8); void main()

38、init();cmd(0xa4);keydisp();/调用函数以在数码管上显示按键值while(1); 附录7:#include#include#include #define uchar unsigned char#define uint unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit RS=P20;sbit RW=P21;sbit EN=P22;sbit SPK=P33;unsigned char x;unsigned char dat;unsigned char k;/定义I/O 接口sbit ZL

39、G7289_pinCS = P10; /片选信号,低电平有效sbit ZLG7289_pinCLK = P11; /时钟信号,上升沿有效sbit ZLG7289_pinDIO = P12; /数据信号,双向sbit ZLG7289_pinINT = P32; /键盘中断请求信号,低电平(负边沿)有效/执行ZLG7289 纯指令extern void ZLG7289_cmd(char cmd);/执行ZLG7289 带数据指令extern void ZLG7289_cmd_dat(char cmd, char dat);/以下是ZLG7289 的用户指令集/复位(清除)指令#define ZLG

40、7289_Reset() ZLG7289_cmd(0xA4)/测试指令#define ZLG7289_Test() ZLG7289_cmd(0xBF)/左移指令#define ZLG7289_SHL() ZLG7289_cmd(0xA0)/右移指令#define ZLG7289_SHR() ZLG7289_cmd(0xA1)/循环左移指令#define ZLG7289_ROL() ZLG7289_cmd(0xA2)/循环右移指令#define ZLG7289_ROR() ZLG7289_cmd(0xA3)/下载数据extern void ZLG7289_Download(unsigned ch

41、ar mod, char x, bit dp, char dat);/闪烁控制/ x 的8 个位分别对应数码管的8 个位,0闪烁,1不闪烁#define ZLG7289_Flash(x) ZLG7289_cmd_dat(0x88,(x)/消隐控制/ x 的8 个位分别对应数码管的8 个位,0消隐,1显示#define ZLG7289_Hide(x) ZLG7289_cmd_dat(0x98,(x)/段点亮指令/seg=063,8 只数码管被看成64 只独立的LED/每只数码管中各段的点亮顺序按照“g,f,e,d,c,b,a,dp”进行#define ZLG7289_SegOn(seg) ZLG

42、7289_cmd_dat(0xE0,(seg)/段关闭指令/seg=063,8 只数码管被看成64 只独立的LED/每只数码管中各段的熄灭顺序按照“g,f,e,d,c,b,a,dp”进行#define ZLG7289_SegOff(seg) ZLG7289_cmd_dat(0xC0,(seg)/执行ZLG7289 键盘命令extern char ZLG7289_Key() reentrant;/ZLG7289 初始化extern void ZLG7289_Init(unsigned char t);unsigned char ZLG7289_Delay_t;/*宏定义:ZLG7289_Shor

43、tDelay()功能:短延时说明:延时(ZLG7289_Delay_t*2+2)个机器周期*/#define ZLG7289_ShortDelay() unsigned char t = ZLG7289_Delay_t;while ( -t != 0 );/*宏定义:ZLG7289_LongDelay()功能:长延时说明:延时(ZLG7289_Delay_t*12+8)个机器周期*/#define ZLG7289_LongDelay() unsigned char t = ZLG7289_Delay_t * 6;while ( -t != 0 );/*函数:ZLG7289_SPI_Write(

44、)功能:向SPI 总线写入1 个字节的数据参数:dat:要写入的数据*/void ZLG7289_SPI_Write(char dat) reentrantunsigned char t = 8;doZLG7289_pinDIO = (bit)(dat & 0x80);dat = 1;ZLG7289_pinCLK = 1;ZLG7289_ShortDelay();ZLG7289_pinCLK = 0;ZLG7289_ShortDelay(); while ( -t != 0 );/*函数:ZLG7289_SPI_Read()功能:从SPI 总线读取1 个字节的数据返回:读取到的数据*/char

45、 ZLG7289_SPI_Read() reentrantchar dat;unsigned char t = 8;ZLG7289_pinDIO = 1; /读取数据之前DIO 引脚要置1 以切换到输入状态doZLG7289_pinCLK = 1;ZLG7289_ShortDelay();dat 2 ) mod = 2;d1 = ModDatmod;x &= 0x07;d1 |= x;d2 = dat & 0x7F;if ( dp ) d2 |= 0x80;ZLG7289_cmd_dat(d1,d2);/*功能:执行ZLG7289 键盘命令返回:返回读到的按键值:063如果返回0xFF 则表示

46、没有键按下*/char ZLG7289_Key() reentrantchar key;ZLG7289_pinCS = 0;ZLG7289_LongDelay();ZLG7289_SPI_Write(0x15);ZLG7289_LongDelay();key = ZLG7289_SPI_Read();ZLG7289_pinCS = 1;ZLG7289_LongDelay();return key;/*函数:ZLG7289_Init()功能:ZLG7289 初始化参数: t:SPI 总线的延时值设置,取值1-40(超出范围可能导致错误)说明:t的取值可以参照以下公式:t = 5 * f1 / f

47、2,其中f1 表示80C51 的晶振频率,f2 表示ZLG7289 的晶振频率*/void ZLG7289_Init(unsigned char t)unsigned char x;/I/O 口初始化ZLG7289_pinCS = 1;ZLG7289_pinCLK = 0;ZLG7289_pinDIO = 1;ZLG7289_pinINT = 1;/延时初始化ZLG7289_Delay_t = t;/点亮所有数码管for ( x=0; x8; x+ )ZLG7289_Download(1,x,1,8);void Delay(unsigned int t)doTH0 = 0xDC;TL0 = 0

48、x00;TR0 = 1;while ( !TF0 );TF0 = 0;TR0 = 0; while (-t);uchar code KeyPad_Chars126=1,2ABC,3DEF,4GHI,5JKL,6MND,7PQRS,8TUV,9WXYZ,*,0+,#;uchar code Line1=* Phone KeyPad *;uchar code Line2=* KEY CHAR: *;uchar KeyNo=-1;uchar Inner_Idx=0;uchar tSpan=0;void DelayMS(uint ms)uchar i;while(ms-) for(i=0;i50;i+);uchar Get_LCD_Status() uchar status;RS=0;RW=1;EN=1;DelayMS(1); status=P0;EN = 0;DelayMS(1); return status; v

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!