历史上的今天
今天是:2024年12月19日(星期四)
2019年12月19日 | 基于LCD显示的篮球定时计分器的设计
2019-12-19 来源:51hei

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;
上一篇:基于单片机的超声波测距仪设计
史海拾趣
|
年初到现在,接触DSP已经半年了,由于公司没有人指导,做了这么久都没出什么大的成果,也走了不少的弯路。以前做单片机用C编过一些程序,个人觉得还可以。现在看来也只是在吃以前在学校里面一些C语言皮毛的老本,加上一些网上说的所谓的技巧什么的 ...… 查看全部问答> |
|
在wince中,当我们用触摸笔点一下屏幕的时候,会在围绕触摸笔在触摸笔周围画一个由几个小黑圆点围成的圆圈,我想问一下,这部分代码在什么位置?调用的什么函数或者库?… 查看全部问答> |
|
各位高手,我想用51通过串口来控制SIM300收发数据,现在已经把SIM300模块和51实验板通过串口连接起来了,可写完程序后模块没有反应,不知道为什么,需要对模块初始化吗?我把程序贴上来麻烦大家看看有什么问题。另外我想用串口接收字符串并判断接收 ...… 查看全部问答> |
|
电平触发方式的中断不是应该保持中断状态么?咋我这个接地之后只是变化的慢了而不是完全不动呢? #include void delay(unsigned int z); //延迟子程序声明 sbit dula=P1^0; //段锁位 sbit A1=P2^2; sbit B1=P2^3; sbit C1=P2^4; ...… 查看全部问答> |
|
就是当你在线仿真调试的时候,变量多的时候MDK的变量(有些是不能显示出来,) 我不知道这算不算是BUG,现在我把我个人经历写出来,希望同行有类似经历时,多留个心眼,换个思维解决,说不定不是你的错! 在我的程序中,刚开始是KEIL MDK建 ...… 查看全部问答> |
|
我想用STM8S207和一个解码芯片进行SPI通信,ST芯片只接受,而解码芯片只发送,两者之间有3根线连接,一根CS片选,一根时钟,一根数据线,然后我用的STVD和source insight进行编程,其中sourceinsight库中有2LINES_FULLDUPLEX, 2LI ...… 查看全部问答> |




