小学期单片机实验报告_第1页
小学期单片机实验报告_第2页
小学期单片机实验报告_第3页
小学期单片机实验报告_第4页
小学期单片机实验报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、创新实验研究报告基于单片机PIC32MX795F512L的猜数字游戏班 级:学生姓名: 班内序号:学 号:指导教师: 摘要实验实现猜数字游戏的功能:系统随机产生一个两位数。用户通过键盘输入猜测的两位数(第一位可以为零)。输入过程中,用户可以修改数字,最后按代表确认的按钮进行确认并保存数字。比较后,显示屏上可以显示猜测结果。如果猜对,显示SUCCEED;如果所猜数字大于随机数,显示BIGGER;如果所猜数字小于随机数,显示SMALLER。在猜测结果为上述后两者的情况下,显示屏会显示FAILED。没有猜测次数的限制,用户可以多次猜测。实验中使用MPLAB IDE建立和编译工程并下载到单片机上,辅以

2、4X4矩阵键盘和LCD1602实现数字输入和操作提示。通过实验,必须掌握单片机的基本概念和工作原理,熟悉单片机的引脚及其功能,了解单片机的时钟设置;学会4X4矩阵键盘和LCD1602的工作原理和逻辑功能并在此基础上编程实现4X4矩阵键盘的按键识别和LCD1602的驱动设计;能够使用MPLAB IDE建立、编译和下载工程,在此过程中掌握单步运行、变量观察窗口、设置断点等调试方法;学会将整个设计模块化。通过对若干模块功能的实现完成整体实验要求。关键词:猜数字、PIC32MX795F512L、4X4矩阵键盘、LCD1602、C语言目录1方案论证与比较311操作提示模块312输入模块313比较模块32

3、系统设计321 总体设计3211 原理模块框图422 各模块设计及参数计算52.2.1 LCD1602显示模块52.2.2 4X4键盘模块62.2.3 指示灯模块723 软件系统设计7231 系统软件流程图7232各模块子程序流程图及设计说明83系统调适1531软件调试1532软件硬件联调154结论165致谢、心得、体会166参考文献177附录171方案论证与比较11操作提示模块LCD1602显示相关语句并辅以LED灯闪烁来提示用户应该进行的下一步操作或反馈操作结果。系统启动和关闭时,LCD提示“ON”和“OFF”,绿、黄、红LED灯同时闪烁;用户输入的数字大于系统产生随机数时,LCD提示“B

4、IGGER”,黄灯闪烁;用户输入的数字小于系统产生随机数时,LCD提示“SMALLER”,红灯闪烁;用户输入的数字等于系统产生随机数时,LCD提示“SUCCEED”,绿灯闪烁;在猜测结果为上述前两者的情况下,LCD提示“FAILED”。12输入模块通过4X4矩阵键盘,输入开关键(F)、确认键(D)、更正键(E)和所猜数字。13比较模块采用C语言程序设计,生成随机二位数并将其和用户所猜测数字进行比较并提示猜测结果。2系统设计21 总体设计图一:PIC32MX795F512L引脚分布其中黄色表示已经被单片机内部集成的电路所占用,功能已经固定,不能提供给开发者使用其他功能。引脚93、94、98、99

5、、100、3、4、5:RE0RE7, LCD的8位数据输入端;引脚96、97、95: RG12、RG13、RG14,分别用作LCD的RW、RS与EN接口;引脚31、36、45:电源地;引脚72、76、77:RD0、RD1、RD2,已经集成的3个LED指示灯;引脚33、41、28、43:RB9、RB12、RA9、RB14,矩阵键盘的行数据输入端;引脚49、50、40、39:RF4、RF5、RF12、RF13,矩阵键盘的列数据输入端。211 原理模块框图22 各模块设计及参数计算2.2.1 LCD1602显示模块_1GND_2VCC_3VO_4RS_5R/W_6E_7DB0_8DB1_9DB2_1

6、0DB3_11DB4_12DB5_13DB6_14DB7_15VDD_16GND图二:LCD1602引脚连接示意图VSSVDDVORSR/WEDB0DB1DB2DB3DB4DB5DB6DB7LEDALEDK 表一表一:引脚功能表脚号符号引脚功能脚号符号引脚功能1GND电源地9D2数据I/O2VDD电源正10D3数据I/O3V0显示偏压信号11D4数据I/O4RS数据/命令控制,H/L12D5数据I/O5R/W读/写控制,H/L13D6数据I/O6E使能信号14D7数据I/O7D0数据I/O15BL1背光源正8D1数据I/O16BL2背光源负GND接电源地,VDD接正电源。VO为显示器对比度调整

7、端,接正电源时对比度最弱,接电源地时对比度最高。为了简化电路以及获得最好的显示效果,将VO端口直接接电源地。R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。源代码中Write_LCD_Command(unsigned char cmd)函数为向LCD写入指令的函数,因此会有RS=0;Write_LCD_Data(unsigned char dat)函数为向LCD写入数据的函数,因此会有RS=1。E端为使能端,当E端由高电平跳变成低电平,即产生一个下降沿时,LCD模块进行命令执行。BL1和BL2为设置LCD背光,BL1

8、接正电源,BL2接电源地。DOD7八个为数据I/O口,与PORTE的0至7口相连。2.2.2 4X4键盘模块图三:4X4矩阵键盘工作原理4X4矩阵键盘的工作原理是每一条行线与列线的交叉处是否连通,是由交叉处的按键决定的,采取这种行列式矩阵结构只需要4条行线和4条列线,即可组成具有4X4个按键的矩阵键盘。矩阵键盘中的16个按键并没有完全采用,按键的使用情况如下表:表二:矩阵键盘按键使用按键键名功能09键数字键输入数字D键确认键对相应操作进行确认指令E键更正键输入密码过程中进行更正F 键开/关键系统开关2.2.3 指示灯模块指示灯采用PIC32MX795F512L单片机内集成的三个LED灯构成,三

9、个灯的亮灯颜色分别是绿、黄、红,系统在启动或者关闭的时候,三个灯会同时闪下,当用户输入的数字比系统的数字大时,只有黄灯会闪,当用户输入的数字比系统的数字小时,只有红灯会闪,当用户输入的数字正确的时候绿灯会闪下。23 软件系统设计231 系统软件流程图系统初始化 LCD初始化生成两位随机数 开始键按下次数为奇次?T关闭系统F开启系统LCD显示GUESS键盘输入数字键存储修改键确认键所猜数字?实际数字等于LCD显示SUCCEED绿灯闪烁大于LCD显示BIGGER黄灯闪烁LCD显示SMALLER红灯闪烁小于LCD显示FAILED开始232各模块子程序流程图及设计说明1、LCD(1)初始化图四:8位接

10、口初始化流程图LCD1602指令集:0x38 设置16*2显示,5*7点阵,8位数据接口0x01 清屏0x0F 开显示,显示光标,光标闪烁0x08 只开显示0x0e 开显示,显示光标,光标不闪烁0x0c 开显示,不显示光标0x06 地址加1,当写入数据的时候光标右移0x02 地址计数器AC=0;(此时地址为0x80) 光标归原点,但是DDRAM中断内容不变0x18 光标和显示一起向左移动根据流程图和指令集得到以下初始化程序:void LCD_Initialize()Delay_nms(16); Write_LCD_Command(0x38);Delay_nms(5);Write_LCD_Com

11、mand(0x38); Delay_nms(1);Write_LCD_Command(0x38);Delay_nms(1);Write_LCD_Command(0x38); /置功能,8位,双行,5*7Delay_nms(1); Write_LCD_Command(0x01); /清屏Delay_nms(1); Write_LCD_Command(0x06); /字符进入模式:屏幕不动,字符后移Delay_nms(1); Write_LCD_Command(0x0C); /显示开,关光标(2)写指令(或数据)图五:写操作时序图由该时序图可知,进行写指令(数据)操作的条件为: RS=0(RS=1

12、); RW=0; E为下降沿; 指令(数据)从单片机RE0RE7引脚输出至LCD的DB0DB7引脚。相应程序为:void Write_LCD_Command(unsigned char cmd)/写命令 TRIS_LCD_DAT=0x00;PORT_LCD_DAT=cmd;PORT_LCD_CTL=TRIS_LCD_CTL=0x00;PORTClearBits(IOPORT_G, BIT_13); /RS=0;PORTClearBits(IOPORT_G, BIT_12); /RW=0;PORTSetBits(IOPORT_G, BIT_14); /E=1;PORTClearBits(IOPO

13、RT_G, BIT_14); /E=0; LCD_BUSY_WAIT(); /LCD忙等待void Write_LCD_Data(unsigned char dat)/写数据 TRIS_LCD_DAT=0x00;PORT_LCD_DAT=dat;PORTSetBits(IOPORT_G, BIT_13); /RS=1;PORTClearBits(IOPORT_G, BIT_12); /RW=0;PORTSetBits(IOPORT_G, BIT_14); /E=1;PORTClearBits(IOPORT_G, BIT_14); /E=0; LCD_BUSY_WAIT(); /LCD忙等待(3

14、)显示字符串LCD1602共16列2行图六:LCD1602显示位与DD RAM地址的对应关系为写入显示地址时要求最高位D7恒定为高电平1。第一行第一列字符的地址为00H,实际写入的数据应该是B(00H)+B(80H)=B(80H)。因而第一行起始地址为0x80。第二行第一列字符的地址为40H,实际写入的数据应该是B(40H)+B(80H)=B(C0H)。因而第二行起始地址为0xC0。相应程序为:void LCD_ShowString(unsigned char x, unsigned char y,char *str)/ 在x行(01) y列(015)显示字符串unsigned char i=

15、0;if (x=0) Write_LCD_Command(0x80|y);else if(x=1) Write_LCD_Command(0xC0|y);for (i=0;i16&stri!=0;i+)Write_LCD_Data(stri);2、4X4矩阵键盘1234RB95678RB1290ABRA9CDEFRB14|RF4 RF5 RF12 RF13图七:键盘行列接口示意图识别思路如下:初使化时使RF4、RF5、RF12、RF13输出高电平,然后逐行识别。即扫描第一行时,令RB9=0, RB12=1,RA9=1,RB14=1。则当RF4为0时,先等待5s,再读RF4,再次确认是否为0,若为

16、0,则可确认为“1”键被按下。等待5s是为了防止抖动干扰造成错误识别。类似地,当RF5=0时,“2”键被按下;当RF12=0时,“3”键被按下;当RF13=0时,“4”键被按下。扫描第二行时,令RB9=1, RB12=0,RA9=1,RB14=1;扫描第三行时,令RB9=1, RB12=1,RA9=0,RB14=1;扫描第四行时,令RB9=1, RB12=1,RA9=1,RB14=0。实现的程序如下:int Set_xy(void)_RB9=0;_RB12=1;_RA9=1;_RB14=1;if(_RF4=0)Delay_nms(5000);if(_RF4=0)return 1;if(_RF5

17、=0)Delay_nms(5000);if(_RF5=0)return 2;if(_RF12=0)Delay_nms(5000);if(_RF12=0)return 3;if(_RF13=0)Delay_nms(5000);if(_RF13=0)return 4;/第二列_RB9=1;_RB12=0;_RA9=1;_RB14=1;if(_RF4=0)Delay_nms(5000);if(_RF4=0)return 5;if(_RF5=0)Delay_nms(5000);if(_RF5=0)return 6;if(_RF12=0)Delay_nms(5000);if(_RF12=0)return

18、 7;if(_RF13=0)Delay_nms(5000);if(_RF13=0)return 8; /第三列_RB9=1;_RB12=1;_RA9=0;_RB14=1;if(_RF4=0)Delay_nms(5000);if(_RF4=0)return 9;if(_RF5=0)Delay_nms(5000);if(_RF5=0)return 0;if(_RF12=0)Delay_nms(5000);if(_RF12=0)return 10;if(_RF13=0)Delay_nms(5000);if(_RF13=0)return 11;/第四列_RB9=1;_RB12=1;_RA9=1;_RB

19、14=0;if(_RF4=0)Delay_nms(5000);if(_RF4=0)return 12;if(_RF5=0)Delay_nms(5000);if(_RF5=0)return 13;if(_RF12=0)Delay_nms(3000);if(_RF12=0)return 14;if(_RF13=0)Delay_nms(5000);if(_RF13=0)return 15;return 16;int main(void)_TRISF4=1;_TRISF5=1;_TRISF12=1;_TRISF13=1;_RF4=1;_RF5=1;_RF12=1;_RF13=1; PORTSetPin

20、sDigitalIn(IOPORT_F, BIT_4|BIT_5|BIT_12|BIT_13); PORTClearBits(IOPORT_F, BIT_4|BIT_5|BIT_12|BIT_13); PORTSetPinsDigitalOut(IOPORT_B, BIT_9|BIT_12|BIT_13|BIT_14); PORTClearBits(IOPORT_B, BIT_9|BIT_12|BIT_13|BIT_14);PORTSetPinsDigitalOut(IOPORT_A,BIT_9);3系统调适31软件调试由于题目的原因,主函数逻辑并不复杂,边写边调试,我们很快就完成了主函数的功

21、能。32软件硬件联调在实验中,我们采用分模块调试的方法。依次实现了4X4矩阵键盘按键识别、LCD显示和主程序调试三个过程。为了实现矩阵键盘功能,我花费了很多时间上网查找资料和请教同学来弄清楚了矩阵键盘的工作原理和扫描方法,也读了很多识别按键的代码。但是自己在编程实现的过程中遇到了很多问题。第一次进行程序时,无论按下那一个键盘,LED灯都没有点亮(程序实现按键点亮LED灯的功能:_RD0=1;)。为此,我们用万用表检查每一根导线是否完好,检查了相应引脚是否连接正确,确保了导线和引脚接触良好,并在程序运行过程中按住单片机和键盘保证引脚和底座没有松动。但是发现并不是硬件出现了问题,在同学的帮助下,发

22、现程序将行、列端口的输入、输出特性配置弄反了。在改正了输入输出特性后,单片机能够对按键进行反应。随后,我们开始对每个按键进行独立的测试。测试方法为:编写程序,使得当按下某一特定键时,LED灯点亮。在测试中出现了同列按键串键的情况,而且串键非常严重。此时键盘模块只能区分不同列的按键,对每一列不同按键不加区分,具有相同的反应。同时不同列之间也存在轻微的串键现象。我们借来了同学的键盘进行测试,发现也是相同的结果。在检测接线和接触问题无果后,我们再次将问题聚焦到代码上。最后推测可能是由于延迟时间过短而没有有效地防抖动。于是我们延长了每次防抖动的延时时间,发现确实有效。我们不停地摸索试验,最终确定了合适

23、的延长时间。同时,在和同学们探讨此类问题的解决方法时,使用了其他小组提出的换一下端口的建议。最终双管齐下,我们解决了这个问题。进行LCD1602模块的调试时,由于老师提前进行了讲解并查找了大量的资料和代码,所以写程序过程进行的很顺利,但是LCD上电后出现了异常。液晶屏首先显示一些矩形块和竖条,而后慢慢变淡,最后没有任何显示。反复几次都是如此,最后甚至上电后没有任何反应。我们仔细检查了每一根导线的状态和引脚与导线的接触状况,排查了链接错误,也多次检查和修改代码。万不得已的情况下,我们借来了其他的LCD,进行简单的调试后,发现程序能够正常进行。为此,我们特意找到了老师。经老师的检测,发现液晶屏确实

24、已经损坏。在换了一个LCD1602后,我们的LCD能够正常显示出来。4结论本次试验实现了预期功能,经调试没有bug。5致谢、心得、体会为期三周的单片机小学期使我受益匪浅。在此要感谢老师的指导、同组同学的支持和班内同学的帮助。在实验过程中,我不仅学会了新的知识,而且将所学所想付诸实践,最终完成了题目设计。虽然整个实验遇到了各种困难,有时还会影响情绪,但坚持下来并完成项目让我有一种满足感,同时激发了学习兴趣。在此期间,我学会了如何将一个复杂的程序模块化,并与小组内其他同学分工合作。开始时,我们对于将要进行的项目没有任何思路,对单片机也无甚概念。因而,我们花了很长时间来了解单片机和MPLAB IDE

25、软件的使用。基本上第一周我们都用来研究老师提供的程序,试图弄明白单片机的引脚及其功能,单片机的时钟设置,MPLAB IDE建立、编译和下载工程的过程。第二周开始矩阵键盘和LCD1602功能的实现。这是我们遇到问题最多的一周,但是坚持下来收获颇丰。最后的主程序仅用了一天就完成了。总体而言,这次设计还是比较成功的。通过这次的实际操作我们都有了很深刻的感悟和体会。6参考文献1李学海. PIC单片机实用教程(基础篇)M.北京:北京航空航天大学出版社, 2007.2李学海. PIC单片机实用教程(提高篇)M.北京:北京航空航天大学出版社, 2007.3 Lucio Di Jasio. 32位单片机C语言

26、编程:基于PIC32 M.北京:人民邮电出版社, 2009.7附录附录1实验代码/globel.h#include /*全局变量*/unsigned char *string;unsigned int input2;/输入数组unsigned int random2;/随机数bool fail;/fail=1出错;bool button;/button=1 ONbool success;/success=1 正确unsigned int m=0;int key=-1;/lcd.h/*LCD*/LCD数据端口与命令端口定义#define PORT_LCD_DAT PORTE#define POR

27、T_LCD_CTL PORTG#define TRIS_LCD_DAT TRISE#define TRIS_LCD_CTL TRISG/ The following is used by the main application#define SYS_FREQ() /主频80MHz/*函数声明*/void LCD_Initialize();void LCD_BUSY_WAIT();void Write_LCD_Command(unsigned char cmd);void Write_LCD_Data(unsigned char dat);void LCD_ShowString(unsigne

28、d char x,unsigned char y,char *str);void Delay_nms(unsigned int n);/延时Nms函数/lcd.c/*LCD*/#include #include lcd.hvoid LCD_BUSY_WAIT() unsigned char status; TRIS_LCD_DAT = 0xFF;/将端口设为输入 PORTClearBits(IOPORT_G, BIT_13); /RS = 0; PORTSetBits(IOPORT_G, BIT_12); /RW = 1; /读状态寄存器 do PORTSetBits(IOPORT_G, BI

29、T_14); /E=1;status=PORT_LCD_DAT;PORTClearBits(IOPORT_G, BIT_14); /E=0; while (status & 0x80); /忙则继续等待void Write_LCD_Command(unsigned char cmd)/写命令 TRIS_LCD_DAT=0x00;PORT_LCD_DAT=cmd;PORT_LCD_CTL=TRIS_LCD_CTL=0x00;PORTClearBits(IOPORT_G, BIT_13); /RS=0;PORTClearBits(IOPORT_G, BIT_12); /RW=0;PORTSetBi

30、ts(IOPORT_G, BIT_14); /E=1;PORTClearBits(IOPORT_G, BIT_14); /E=0; LCD_BUSY_WAIT(); /LCD忙等待void Write_LCD_Data(unsigned char dat)/写数据 TRIS_LCD_DAT=0x00;PORT_LCD_DAT=dat;PORTSetBits(IOPORT_G, BIT_13); /RS=1;PORTClearBits(IOPORT_G, BIT_12); /RW=0;PORTSetBits(IOPORT_G, BIT_14); /E=1;PORTClearBits(IOPORT

31、_G, BIT_14); /E=0; LCD_BUSY_WAIT(); /LCD忙等待void LCD_Initialize()/ LCD初始化Delay_nms(16); Write_LCD_Command(0x38);Delay_nms(5);Write_LCD_Command(0x38); Delay_nms(1);Write_LCD_Command(0x38);Delay_nms(1);Write_LCD_Command(0x38); /置功能,8位,双行,5*7Delay_nms(1); Write_LCD_Command(0x01); /清屏Delay_nms(1); Write_

32、LCD_Command(0x06); /字符进入模式:屏幕不动,字符后移Delay_nms(1); Write_LCD_Command(0x0C); /显示开,关光标void LCD_ShowString(unsigned char x, unsigned char y,char *str)/ 在x行(01) y列(015)显示字符串unsigned char i=0;if (x=0) Write_LCD_Command(0x80|y);else if(x=1) Write_LCD_Command(0xC0|y);for (i=0;i0;a-)for(b=500;b0;b-)/device.h

33、#includelcd.h#includegloble.h#include#pragma config FNOSC = PRIPLL / Oscillator Selection#pragma config FPLLIDIV = DIV_2 / PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)#pragma config FPLLMUL = MUL_20 / PLL Multiplier#pragma config FPLLODIV = DIV_1 / PLL Output Divider#pragma config FPB

34、DIV = DIV_1 / Peripheral Clock divisor#pragma config FWDTEN = OFF / Watchdog Timer#pragma config WDTPS = PS1 / Watchdog Timer Postscale#pragma config FCKSM = CSDCMD / Clock Switching & Fail Safe Clock Monitor#pragma config OSCIOFNC = OFF / CLKO Enable#pragma config POSCMOD = XT / Primary Oscillator#

35、pragma config IESO = OFF / Internal/External Switch-over#pragma config FSOSCEN = OFF / Secondary Oscillator Enable/调试模式选择,通过配置寄存器DEV_CONFIG0#pragma config CP = OFF / Code Protect#pragma config BWP = OFF / Boot Flash Write Protect#pragma config PWP = OFF / Program Flash Write Protect#pragma config IC

36、ESEL = ICS_PGx2 / ICE/ICD Comm Channel Select#pragma config DEBUG = OFF / Debugger Disabled for Starter Kit/ The following is used by the main application#define SYS_FREQ() /主频80MHz/ IOPORT bit masks can be found in ports.h#define PULLUPS (CN15_PULLUP_ENABLE | CN16_PULLUP_ENABLE)/两个指示灯的弱上拉电阻使能/guess

37、.h#includedevice.h#include#include /srand()、rand()#include /time();void Judge(void);/打开时判断是否正确int Set_xy(void);/键盘坐标生成函数/*Judge/判断是否正确*/void Judge(void) if(input0*10+input1)(random0*10+random1) fail=1;string=BIGGER;LCD_ShowString(0,0,string);PORTSetBits(IOPORT_D,BIT_1);Delay_nms(10000);PORTClearBits

38、(IOPORT_D, BIT_1);Write_LCD_Command(0x01); if(input0*10+input1)(random0*10+random1) fail=1;string=SMALLER;LCD_ShowString(0,0,string);PORTSetBits(IOPORT_D,BIT_2);Delay_nms(10000);PORTClearBits(IOPORT_D, BIT_2);Write_LCD_Command(0x01); if(!fail) /提示正确打开success=1;string=SUCCEED!;LCD_ShowString(0,0,stri

39、ng);PORTSetBits(IOPORT_D,BIT_0);Delay_nms(5000);PORTClearBits(IOPORT_D, BIT_0);Write_LCD_Command(0x01); /清屏if(fail=1)/提示输入错误继续string=FAILED;LCD_ShowString(0,0,string);Delay_nms(10000);Write_LCD_Command(0x01); /清屏string=GUESS:;LCD_ShowString(0,0,string);m=0;while(m2)inputm=10;m+; m=0;fail=!fail;/*Set

40、_xy/确定按键坐标4*4*/int Set_xy(void)_RB9=0;_RB12=1;_RA9=1;_RB14=1;if(_RF4=0)Delay_nms(3000);if(_RF4=0)return 1;if(_RF5=0)Delay_nms(3000);if(_RF5=0)return 2;if(_RF12=0)Delay_nms(3000);if(_RF12=0)return 3;if(_RF13=0)Delay_nms(3000);if(_RF13=0)return 4;/第二列_RB9=1;_RB12=0;_RA9=1;_RB14=1;if(_RF4=0)Delay_nms(3

41、000);if(_RF4=0)return 5;if(_RF5=0)Delay_nms(3000);if(_RF5=0)return 6;if(_RF12=0)Delay_nms(3000);if(_RF12=0)return 7;if(_RF13=0)Delay_nms(3000);if(_RF13=0)return 8; /第三列_RB9=1;_RB12=1;_RA9=0;_RB14=1;if(_RF4=0)Delay_nms(3000);if(_RF4=0)return 9;if(_RF5=0)Delay_nms(3000);if(_RF5=0)return 0;if(_RF12=0)D

42、elay_nms(3000);if(_RF12=0)return 10;if(_RF13=0)Delay_nms(3000);if(_RF13=0)return 11;/第四列_RB9=1;_RB12=1;_RA9=1;_RB14=0;if(_RF4=0)Delay_nms(3000);if(_RF4=0)return 12;if(_RF5=0)Delay_nms(3000);if(_RF5=0)return 13;if(_RF12=0)Delay_nms(3000);if(_RF12=0)return 14;if(_RF13=0)Delay_nms(3000);if(_RF13=0)retu

43、rn 15;return 16;/guess.c#includeguess.h#include #include #include #include #include /使用当前时钟做种子#include lcd.h/*-main(void)-*/int main(void)_TRISF4=1;_TRISF5=1;_TRISF12=1;_TRISF13=1;_RF4=1;_RF5=1;_RF12=1;_RF13=1; PORTSetPinsDigitalIn(IOPORT_F, BIT_4|BIT_5|BIT_12|BIT_13); PORTClearBits(IOPORT_F, BIT_4|

44、BIT_5|BIT_12|BIT_13); PORTSetPinsDigitalOut(IOPORT_B, BIT_9|BIT_12|BIT_13|BIT_14); PORTClearBits(IOPORT_B, BIT_9|BIT_12|BIT_13|BIT_14);PORTSetPinsDigitalOut(IOPORT_A,BIT_9);/initiate();PORTSetPinsDigitalOut(IOPORT_D,BIT_0|BIT_1|BIT_2); PORTSetBits(IOPORT_D,BIT_0|BIT_1|BIT_2);Delay_nms(5000);PORTClea

45、rBits(IOPORT_D, BIT_0|BIT_1|BIT_2);SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); PORTSetPinsDigitalOut(IOPORT_G, BIT_12 | BIT_13| BIT_14);PORTClearBits(IOPORT_G, BIT_12 | BIT_13| BIT_14);PORTSetPinsDigitalOut(IOPORT_E, BIT_0 | BIT_1| BIT_2| BIT_3| BIT_4| BIT_5| BIT_6| BIT_7);PORTClearBits(IOPORT_E, BIT_0 | BIT_1| BIT_2| BIT_3| BIT_4| BIT_5| BIT_6| BIT_7);LCD_Initialize();

温馨提示

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

评论

0/150

提交评论