完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
程序代码如下: 注:电路已检测无虚焊,各元件是好的
#include #define uint unsigned int #define uchar unsigned char uchar code table[]=".. Play ball! ...."; uchar code table1[]="Welcome to here!" ; ***it key_ST=P1^5; //功能键(开始/暂停) ***it key_A1=P1^0; //功能键(A队分数加1) ***it key_A2=P1^3; //功能键(A队分数加2) ***it key_1A=P1^6; //功能键(A队分数减1) ***it key_B1=P1^1; //功能键(B队分数加1) ***it key_B2=P1^4; //功能键(B队分数加2) ***it key_1B=P1^7; //功能键(B队分数减1) ***it key_EX=P1^2; //功能键(交换场地,A/B两队分数交换) ***it key_JS=P3^0; //功能键(比赛节数加1) ***it FMQ=P3^3; //蜂鸣器 ***it lcdrs=P3^5; //LCD显示的数据/命令选择端 ***it 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; } while(!key_ST) display(min,sec,C,D,js); FMQ=1; } if(key_A1==0) { delayms(5); if(key_A1==0) { FMQ=0; C++; } while(!key_A1) display(min,sec,C,D,js); FMQ=1; } if(key_A2==0) { delayms(5); if(key_A2==0) { FMQ=0; C+=2; } while(!key_A2) display(min,sec,C,D,js); FMQ=1; } if(key_1A==0) { delayms(5); if(key_1A==0) { FMQ=0; C--; } while(!key_1A) display(min,sec,C,D,js); FMQ=1; } if(key_B1==0) { delayms(5); if(key_B1==0) { FMQ=0; D++; } while(!key_B1) display(min,sec,C,D,js); FMQ=1; } if(key_B2==0) { delayms(5); if(key_B2==0) { FMQ=0; D+=2; } while(!key_B2) display(min,sec,C,D,js); FMQ=1; } if(key_1B==0) { delayms(5); if(key_1B==0) { FMQ=0; D--; } while(!key_1B) display(min,sec,C,D,js); FMQ=1; } while(min==0&&sec==0) { TR0=0; TR1=1; if(key_ST==0) { delayms(5); if(key_ST==0) { FMQ=0; min=11; sec=60; TR0=~TR0; } while(!key_ST) display(min,sec,C,D,js); FMQ=1; } if((key_EX==0)&&(js==2)) { delayms(10); if((key_EX==0)&&(js=2)) { FMQ=0; write_com(0x80+0x43); write_data('B'); write_com(0x80+0x49); write_data('A'); t=C; C=D; D=t; } while(!key_EX) display(min,sec,C,D,js); FMQ=1; } if(key_JS==0) { delayms(10); if(key_JS==0) { FMQ=0; js++; } while(!key_JS) display(min,sec,C,D,js); FMQ=1; } display(min,sec,C,D,js); } display(min,sec,C,D,js); } } void T0_time()interrupt 1 //中断0控制晶码管显示时间 { TH0=(65536-45872)/256; // 重装初值 TL0=(65536-45872)%256; num++; if(num==20) { num=0; sec--; if(sec<0) { sec=59; min--; } } } void T1_time()interrupt 3 //中断0控制晶码管显示时间 { TH1=(65536-45872)/256; // 重装初值 TL1=(65536-45872)%256; num1++; if(num1==20) { num1=0; time_fmq++; if(time_fmq>=4) FMQ=1; else FMQ=0; } }
|
|
相关推荐
11个回答
|
|
程序代码跟原理图来自某论坛
|
|
|
|
出现的问题就是:LCD1602不会显示,只亮,按键按下有声音
|
|
|
|
|
|
|
|
1602初始化不成功,你没有查1602的忙状态,而用了延时的方法,应该是延时时间不够,仿真用的是at89c52,标准51,是12分频的,如果实物是用1T的单片机,那1602的延时就不够了
|
|
|
|
去看看1602的手册
|
|
|
|
先把与1602无直接关系的程序全部屏蔽掉,单独调试1602,主程序初始化后随便显示一个字符,主循环空着什么都不干,1602调通后再加上其他程序统调。5楼提示有重要参考意义!
|
|
|
|
人中狼 发表于 2017-6-5 21:38 延时是指写入命令时的延时还是指其他的? |
|
|
|
刚看了一下,在写入1602数据或命令时,你的程序里并没有做延时,在下面两个地方加延时试试。
void write_data(uchar date) { 增加延时,先试试10毫秒左右的,如果不行,再加长一点 lcdrs=1; void write_com(uchar com) //定义为命令模式 { 增加延时,先试试10毫秒左右的,如果不行,再加长一点 lcdrs=0; |
|
|
|
是的,延时加上去之后就可以了 |
|
|
|
问题已解决谢谢各位,
|
|
|
|
ok,问题有两个,第一是:写数据跟命令时,延时没有,第二:可能是焊的有问题,在开发板可以实现
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11793 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 23:01 , Processed in 2.013441 second(s), Total 92, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号