基于LCD显示的篮球定时计分器的设计

发布者:Lihua521最新更新时间:2019-12-19 来源: 51hei关键字:LCD显示  篮球定时计分器  51单片机 手机看文章 扫描二维码
随时随地手机看文章

LCD1602显示的篮球定时计分器的51单片机程序:

#include

#define uint unsigned int 

#define uchar unsigned char


uchar code table[]=".. Play ball! ....";

uchar code table1[]="Welcome to here!" ;

sbit key_ST=P1^5;                 //功能键(开始/暂停)

sbit key_A1=P1^0;                 //功能键(A队分数加1)

sbit key_A2=P1^3;                 //功能键(A队分数加2)

sbit key_1A=P1^6;                 //功能键(A队分数减1)

sbit key_B1=P1^1;                 //功能键(B队分数加1)

sbit key_B2=P1^4;                 //功能键(B队分数加2)

sbit key_1B=P1^7;                 //功能键(B队分数减1)

sbit key_EX=P1^2;                 //功能键(交换场地,A/B两队分数交换)

sbit key_JS=P3^0;                 //功能键(比赛节数加1)

sbit FMQ=P3^3;                         //蜂鸣器

sbit lcdrs=P3^5;                 //LCD显示的数据/命令选择端

sbit lcden=P3^4;                 //LCD显示的使能信号


uchar flag,ms,mg,ss,sg,ags,agg,bgs,bgg,num,num1,num2,js=1,C,D,t,min=0,time_fmq;        

int sec=12;


void delayms(uint xms)                        //定义延时函数

{

        uint i,j;

        for(i=xms;i>0;i--)

                for(j=110;j>0;j--);

}


void write_data(uchar date)                                        //定义为数据模式

{

        lcdrs=1;

        P0=date;

        delayms(5);

        lcden=1;

        delayms(5);

        lcden=0;

}

                                                                        

void write_com(uchar com)                                           //定义为命令模式

{

        lcdrs=0;

        P0=com;

        delayms(5);

        lcden=1;

        delayms(5);

        lcden=0;

}


void lcd_init()                                                                   //LCD显示屏的初始化

{

        lcden=0;

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        write_com(0x01);

}


void init()                                                                          //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”)

{

        lcden=0;

        write_com(0x82);

        write_data('T');

        write_data('-');


        write_com(0x8a);

        write_data('Q');

        write_data('-');


        write_com(0x80+0x43);

        write_data('A');

        write_data(':');


        write_com(0x80+0x49);

        write_data('B');

        write_data(':');


}


void init_start()                                                                          //LCD显示屏的初始化2(即输出“T-”、“Q-”、“A:”、“B:”)

{

        lcden=0;

        write_com(0x80+0x10);

        for(num2=0;num2<16;num2++)

        {

                write_data(table1[num2]);

                delayms(5);

        }


        write_com(0x80+0x50);

        for(num2=0;num2<17;num2++)

        {

                write_data(table[num2]);

                delayms(5);

        }

        for(num2=0;num2<16;num2++)

        {

                write_com(0x18);

                delayms(400);

        }

}


void display(uchar min,int sec,uchar C,uchar D,uchar js)                   //显示函数

{

        ss=sec/10;

        sg=sec%10;

        ms=min/10;

        mg=min%10;

        ags=C/10;

        agg=C%10;

        bgs=D/10;

        bgg=D%10;


        write_com(0x84);

        write_data(0x30+ms);


        write_data(0x30+mg);


        write_data(':');


        write_data(0x30+ss);


        write_data(0x30+sg);


        write_com(0x8d-1);

        write_data(0x30+js);


        write_com(0x80+0x45);

        write_data(0x30+ags);

        write_data(0x30+agg);


        write_com(0x80+0x4b);

        write_data(0x30+bgs);

        write_data(0x30+bgg);                

}


void main()

{

        TMOD=0x11;                                                                //定义定时器0的工作方式为0001

        TH0=(65536-45872)/256;                                        //装初值

        TL0=(65536-45872)%256;

        TH1=(65536-45872)/256;                                        //装初值

        TL1=(65536-45872)%256;

        EA=1;                                                                        //打开总中断

        ET0=1;                                                                        //打开定时器0的中断

        TR0=0;

        ET1=1;

        TR1=0;

        lcd_init();

        init_start();                                                

        while(1)

        {

                TR1=0;


                if(key_ST==0)                                                

                {

                        delayms(5);

                        if(key_ST==0)

                        {

                                FMQ=0;

                                if(flag==0)

                                {

                                        lcd_init();

                                        init();

                                }

                                flag=1;

                                TR0=~TR0;        

[1] [2] [3]
关键字:LCD显示  篮球定时计分器  51单片机 引用地址:基于LCD显示的篮球定时计分器的设计

上一篇:基于单片机的超声波测距仪设计
下一篇:51单片机头文件reg51.h学习心得

推荐阅读最新更新时间:2024-10-31 19:21

51单片机独立按键和矩阵按键实现
独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开。我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状态。 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号 如下图所示: 如图所示,按键闭合式不会立刻稳定的接通,断开时也不会一下子断开,会伴随一些抖动。抖动的时间长短有按键特性决定,一般为5Ms到10ms.按键抖动会引起按键被误读多次。为了确保 CPU 对按键的一次闭合仅作一次处理,必须进行消抖。 消抖 消抖可分为硬件消抖和软件消抖。为了使电路更加简单,通常采用软件消抖。 一般来说一个简单的按键消抖就是
[单片机]
基于51单片机的可控硅调压调光程序-带过零检测
这是一个用51单片机通过过零检测来调整可控硅的导通角从而实现调光调压,其中过零电路用一个p620光耦,220v这端的电阻是40k,这是一个已经有成熟应用的例子. 全部代码下载:http://www.51hei.com/f/kkggl.rar 以下是c51源代码部分: #include reg52.H #include "intrins.h" #define _50msL_ 50000*0.9216 #define _50msH_ 50000*0.9216 #define _1ms_ 922 #define _10ms_ 9216 #define _50us 46 //50*0.9216 #define uchar unsi
[单片机]
51单片机--键盘识别
单片机的键盘由于介入了人为操作,并不都是机器按流程跑,所以必须考虑到人的操作时长远大于机器周期,所以对于键盘状态的检测必须是写在while中,进行循环检测,这些需要实时检测的状态是:从没有按下到按下,和从已经按下到松手。而为了可以使while中的循环可以跳出,进入while的判断语句中的变量要在while循环中再次赋值,而这个赋值必须是与新状态相关的。 P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { tem
[单片机]
基于51单片机的电子存包柜的设计
Small RTOS 对RAM 需求小,非常适合单片机这类资源比较少的系统上。RTOS 具有多任务处理,较强的实时性,可裁减的内核,使得实时应用程序的设计、扩展和维护变得更容易。RTOS 思想的引入,一改传统单片机软件设计方法,使其不再是单一线程结构方式,通过应用程序分割为若干独立的任务,RTOS 使得应用程序的设计过程大为简化。本文结合基于单片机的电子存包柜的软件设计,简要分析了Small RTOS 的设计思想及消息队列通信机制的应用。 1. Small RTOS51 的基本原理 Small RTOS51是一个很小的内核,完全集成在KEIL C51编译器中,仅占用较少的程序存储空间,可以在没有外挂数据存储器的51单片机系统中
[单片机]
基于<font color='red'>51单片机</font>的电子存包柜的设计
51单片机入门 - 数码管动态显示实验
设计要求: 在8位8端的数码管上动态显示76543210,快速显示时人眼看到的效果为同时亮起 ———————————————————————————————————————————— 实现目标: ———————————————————————————————————————————— 数码管编码计算: #include reg52.h typedef unsigned char uchar; uchar table = { //Proteus图上数码管下引脚显示对应的断码,从前往后分别是0123456789AbCdEF 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE
[单片机]
<font color='red'>51单片机</font>入门 - 数码管动态显示实验
17-基于51单片机的停车场车位管理系统
具体实现功能 由AT89S52单片机+AT24C02数据存储模块+按键模块+LCD1602显示+报警模块等构成。 具体功能: (1)显示停车场现有车辆数和已停放过车辆数,总共16个车位,指示灯指示具体的车位占用情况; (2)可以手动设置总车位数以及剩余车位数; (3)车位满后将报警提示。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定
[单片机]
17-基于<font color='red'>51单片机</font>的停车场车位管理系统
51单片机控制的DS18B20温度测量报警系统
需要的功能及作用 单片机DS18B20温度测量系统的测量范围为0-99.9摄氏度,可设置上限报 警温度、下限报 警温度(即高于上限值或者低于下限值时蜂鸣器报 警),默认上限报 警温度为38℃、默认下限报 警温度为5℃。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报 警值等于当前上限报 警值。将下限报 警值调为0时为关闭下限报 警功能。电源电压VCC为5V,可以焊一只USB座到板上,然后用相应的USB线连接至电脑,通过电脑USB口供电;DS18B20也可以根据需要用屏蔽电缆引出来。K1为进入/退出设置键;K2为增加键;K3为减少键。 废话不多说,先上实物图 因为项目比较简单就不放一些具体的工艺图片了
[单片机]
<font color='red'>51单片机</font>控制的DS18B20温度测量报警系统
MCS-51单片机串行通讯口IP核的实现
script language=javascript src="http://www.dqjsw.com.cn/plus/ad_js.php?aid=10000" /script script type=text/javascript /*300*250,创建于2014-1-17 内容页中 dqjsw*/ var cpro_id = "u1457042"; /script script src="http://cpro.baidustatic.com/cpro/ui/c.js" type=text/javascript /script script src="http://pos.baidu.com/ecom
[单片机]
MCS-<font color='red'>51单片机</font>串行通讯口IP核的实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved