1、加1分,加2分,加3分,启动、暂停,复位,下一节,A队进攻,B队进攻,8个按键功能。3硬件设计及描述3.1总体描述系统硬件电路图如下图3-1所示:图3-1硬件整体结构图系统的主要芯片包括Atmel公司的8位单片机AT89C51,PG60128ALCD,蜂鸣器以及一个八个按键组成。下面将对这些芯片分别予以介绍。3.1.1 AT89C51单片机简介STC是美国公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统
2、,片内置通用8位中央处理器(CPU)和Flash存储单元,可灵活应用于各种控制领域。图3-2单片机引脚图1.主要特性与MCS-51产品指令系统完全兼容4k字节可重擦写Flash闪速存储器1000次擦写周期全静态操作:0Hz24MHz三级加密程序存储器1288字节内部RAM32个可编程IO口线2个16位定时计数器6个中断源可编程串行UART通道低功耗空闲和掉电模式 AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个IO 口线,两个16位定时计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的
3、静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.管脚说明Vcc:电源电压GND:地P0 :P0 口是一组8 位漏极开路型双向IO 口,也即地址数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FIash编程时,P0口接收指令字节,而在程序校验时,输出指
4、令字节,校验时,要求外接上拉电阻。P1 :P1是一个带内部上拉电阻的8位双向IO口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。P2 :P2是一个带有内部上拉电阻的8位双向IO口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输
5、出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRI 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。P3: P3口是一组带有内部上拉电阻的8 位双向IO 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。
6、P3口除了作为一般的IO口线外,更重要的用途是它的第二功能,如下表所示:P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此
7、引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外
8、部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。AT89C5l 中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路。3.1.2 PG160128LCD简介PG160128LCD是像素可寻址的图形液晶
9、显示屏模块1. 芯片特性 160 X 128 字符显示点阵; 并行 8 线数据通信; 白色点阵,蓝色背景,独立LED背光电源; 工作温度宽, 工业级 LCM, 超薄外型设计。2.操作说明图3-3 PG160128引脚说明图3-4 PG160128内部结构及时序图图3-5 读数据时序图与读/写时间表图3-6 设置显示起始说明3.2系统总体框图图3.1 总体框图3.3Proteus电路图图3.2 Proteus电路图3.4各部分硬件介绍1、PG160128ALCD液晶显示模块:图3.3 液晶显示模块图3.4 独立键盘模块4软件设计流程及描述4.1程序流程图图4.1 程序流程图4.2函数模块及功能1
10、、uchar Status_BIT_01(); / 状态位STA1,STA0判断(读写指令和读写数据)2、uchar Status_BIT_3(); / 状态位ST3判断(数据自动写状态)3、uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2); / 写双参数的指令4、uchar LCD_Write_Command_P1(uchar cmd,uchar Para1); / 写单参数的指令5、uchar LCD_Write_Command(uchar cmd); / 写无参数的指令6、uchar LCD_Write_Data(
11、uchar dat); / 写数据7、uchar LCD_Read_Data(); / 读数据8、void Set_LCD_POS(uchar row, uchar col) reentrant; / 设置当前地址功能说9、void cls(); / 清屏10、uchar LCD_Initialise(); / LCM 初始化明11、uchar Display_Str_at_xy(uchar x,uchar y,char *fmt,uchar wb) reentrant;/ ASCII(8*16) 及 汉字(16*16) 显示函数12、void OutToLCD(uchar Dat,uchar
12、 x,uchar y);/显示辅助函数13、void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, uchar Mode) reentrant;/在指定位置画线14、void Pixel(unsigned char PointX,unsigned char PointY, uchar Mode); /在指定坐标画点15、void Show_Score_A();/*功能:显示A队得分。变量:dat_str14,用于存取A队分数。参 数: 无。返 回 值:无。调用函数:Display_St
13、r_at_xy(),显示A队分数在指定位置。*/ 16、void show_Score_B();/显示B队得分显示B队得分。dat_str14,用于存取B队分数。Display_Str_at_xy(),显示B队分数在指定位置。17、void show_Section();显示节次。dat_str12,用于存取节次。Display_Str_at_xy(),显示节次在指定位置。5功能实现(功能介绍+照片)1、计分器计时计分界面。图5.1 计分器计时计分界面6心得体会通过本次课程设计增加了我对单片机各模块功能的了解。实验过程让我更加了解并进一步掌握了中断,定时计数,键盘等程序编写。以及更加懂得了通过
14、Proteus构造自己所需要的外围电路,进行仿真实验。单片机应用系统中,通常需要人机对话功能,能够随时发出各种控制命令和输入数据,报告应用系统的运行状态与结果。该系统设计能够很实用得简单模拟篮球计时计分效果具有较高的可用性。还可以通过修改程序,增加加时赛更好的完善该系统。液晶显示技术的普及应用和发展,给仪器、设备的小型化及智能化带来了光辉的前景,特别是点阵图形式液晶显示模块,它具有体积小、重量轻、低电压、底功耗之优点,因而在显示内容和显示功能等方面表现出了独特的性能。由于液晶显示器已成为日常工作和生活中各种显示仪器、仪表、和袖珍电子产品的重要组成部分,因此对于点阵图形液晶显示器件(模块)的开发
15、、设计、应用和研究对于将来的从事有关液晶显示技术方面的工作具有重要意义。7源程序/* 篮球计分计时器.c*/#include string.hstdlib.hstdio.h#include LCD_160128.hextern uchar LCD_Initialise();extern uchar LCD_Write_Command(uchar cmd);extern uchar LCD_Write_Command_P1(uchar cmd,uchar paral);extern uchar LCD_Write_Command_P2(uchar cmd,uchar paral,uchar pa
16、ra2);extern uchar LCD_Write_Data(uchar dat);extern void Pixel(uchar x,uchar y, uchar Mode);extern void Set_LCD_POS(uchar row,uchar col) reentrant;extern void Line(uchar x1,uchar y1,uchar x2,uchar y2,uchar Mode) reentrant;/以上在中断中也有用到所以定义为可重入函数extern void Draw_Image(uchar *G_Buffer,uchar Start_Row,uch
17、ar Start_Col)reentrant;extern void Display_Str_at_xy(uchar x,uchar y,char *Buffer,uchar wb) reentrant;extern void cls();sbit buzzer=P33;sbit Add_1=P10;sbit Add_2=P11;sbit Add_3=P12;sbit A_attack=P13;sbit start_or_stop=P14;sbit B_attack=P15;sbit reset=P16;sbit next_section=P17;int A_Score=0,B_Score=0
18、;uchar section=1,MM=12,Last_MM=0,SS=0,Last_SS=0,team=0,A_time=24,Last_A_time=0,B_time=24,Last_B_time=0,count=0,status=0;void delay(uint ms) uchar i; while (-ms)for(i=0;i120;i+); void sounder(uchar t) uchar i,j; for(i = 0;150;i+) buzzer=buzzer; for(j = 0;jt;j+); /显示A队得分void Show_Score_A() char dat_st
19、r14 = 0,0,0,0; dat_str10 = A_Score / 100+ 0; dat_str11 = (A_Score % 100) / 10+ dat_str12 = A_Score % 10+ Display_Str_at_xy(26,24,dat_str1,0);void show_Score_B() char dat_str14 = 0,0,0,0; dat_str10 = B_Score / 100+ dat_str11 = (B_Score % 100) / 10+ dat_str12 = B_Score % 10+ Display_Str_at_xy(102,24,d
20、at_str1,0); /显示节次void show_Section() char dat_str12 = 0,0; dat_str10 = section % 10+ Display_Str_at_xy(66,46,dat_str1,0);/显示节次剩余时间void show_section_time() char dat_str13 = 0,0,0; if(SS!=Last_SS) Last_SS=SS; dat_str10 = SS / 10+ dat_str11 = SS % 10+ Display_Str_at_xy(114,68,dat_str1,0); if(MM!=Last_M
21、M) Last_MM=MM; dat_str10 = MM / 10+ dat_str11 = MM % 10+ Display_Str_at_xy(90,68,dat_str1,0); void show_attack_time() char dat_str13 = 0,0,0; /显示A对进攻剩余时间 if(team=0) if(A_time!=Last_A_time) Last_A_time=A_time; dat_str10 = A_time / 10+ dat_str11 = A_time % 10+ Display_Str_at_xy(90,112,dat_str1,0); sou
22、nder(80); /显示B对进攻剩余时间 else if(B_time!=Last_B_time) Last_B_time=B_time; dat_str10 = B_time / 10+ dat_str11 = B_time % 10+ /显示进攻方void show_attacker() Display_Str_at_xy(74,90,A,0);B/显示状态void show_status() if(status=0) Display_Str_at_xy(117,46,暂停 ,1);进行中void show_maker() Display_Str_at_xy(26,2,单片机程序设计 D
23、isplay_Str_at_xy(35,24,篮球计分计时器 Display_Str_at_xy(39,46,物联网1102班 Display_Str_at_xy(20,68,制作者:游建南,吴华榕 Display_Str_at_xy(20,90,福建工程学院软件学院 Display_Str_at_xy(46,112,2013/12/8 /画主菜单void Draw_Menu_UI() Line(0,0,159,0,1); Line(159,0,159,127,1); Line(159,127,0,127,1); Line(0,127,0,0,1); Display_Str_at_xy(30,
24、2,A队 Display_Str_at_xy(106,2,B队 Show_Score_A(); Display_Str_at_xy(76,24,: Show_Score_B(); Display_Str_at_xy(2,46,当前节次: show_Section(); Display_Str_at_xy(75,46, 状态:暂停 Display_Str_at_xy(2,68,本节剩余时间: Display_Str_at_xy(90,68,12 Display_Str_at_xy(106,68,: Display_Str_at_xy(114,68,00 Display_Str_at_xy(2,90,当前进攻方: Display_Str_at_xy(74,90, Display_Str_at_xy(2,112,进攻剩余时间: Display_Str_at_xy(90,112,24* 按键检测*/ void check_key() uchar score=0; /加分 if(Ad
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1