找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1031|回复: 2
打印 上一主题 下一主题
收起左侧

想用51单片机制作电子时钟,但LCD1602只发光不显示东西 求帮助

[复制链接]
跳转到指定楼层
楼主
#include<REGX51.h>

#define LCD1602_DATAPINS P0
#define uchar unsigned char
#define uint unsigned int
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
sbit k1=P3^1; //????P3.1????k1 ????????
sbit k2=P3^2; //????P3.1??K1
sbit k3=P3^3; //????P3.1??k1
uchar LED1,LED2,LED4,LED5,LED7,LED8;//???????????????
uchar select_function;
uchar time1,time2,time3;
code uchar display[]="TIME:";
void Lcd1602_Delaylms(uint z)
{
uint x,y;
for(;z>0;z--)
{
  for(y=199;y>0;y--)
  {
   for(x=1;x>0;x++);
  }
}
}
void Timer0Init()
{
TMOD=0x01;//?????????0???????????1??????TR0???????
TH0=0xD8; //?????????????????10ms
TL0=0xF0;
EA=1; //?????ж?
ET0=1;//???????0?ж?????
TR0=1;//???????0
}
void LcdWriteCom(uchar com) //д??????
{
LCD1602_RS = 0; //?????????
LCD1602_RW = 0; //???д??
LCD1602_DATAPINS = com; //????????
Lcd1602_Delaylms(1); //??????????
LCD1602_E = 1; //???
LCD1602_E = 0; //д?????
Lcd1602_Delaylms(5); //???????
}
void LcdWriteData(uchar dat)
{
LCD1602_RS = 1; //???????????
LCD1602_RW = 0; //???д??
LCD1602_DATAPINS = dat; //д??????
Lcd1602_Delaylms(1);
LCD1602_E = 1; //???????
LCD1602_E = 0; //д?????
Lcd1602_Delaylms(5); //???????
LCD1602_E = 0;
}
void LcdInit()
{
LcdWriteCom(0x38); //?????
LcdWriteCom(0x0C); //?????????????
LcdWriteCom(0x06); //д???????1
LcdWriteCom(0x01); //????
LcdWriteCom(0x80); //??????????????
}
void show_string(uchar *dat)
{
uint i;
for(i=0;i<16;i++)
{
  if(*(dat+i)=='\0')
  break;
  LcdWriteData(*(dat+i));
}
}
void lcd_pos(uchar pos)
{
LcdWriteCom(pos | 0x80);
}
void timer_calculate() //????????
{
time1++;
if(time1==60)
{
  time1=0;
  time2++;
}
if(time2==60)
{
  time1=0;
  time2=0;
  time3++;
}
  if(time3==24)
  {
   time1=0;
  time2=0;
  time3=0;
}
}
void time_display(void) //??????
{
lcd_pos(0x05);
LcdWriteData(LED8+'0');
lcd_pos(0x06);
LcdWriteData(LED7+'0');
lcd_pos(0x07);
LcdWriteData('-');
  
lcd_pos(0x08);
LcdWriteData(LED5+'0');
lcd_pos(0x09);
LcdWriteData(LED4+'0');
lcd_pos(0x0a);
LcdWriteData('-');
lcd_pos(0x0b);
LcdWriteData(LED2+'0');
lcd_pos(0x0c);
LcdWriteData(LED1+'0');
}
void keypros() //?????
{
if(k1==0)//?????k1?????
{
  Lcd1602_Delaylms(10); //???????? ?????10ms
  if(select_function==4)
  {
   select_function=0;
  }
  if(select_function!=0)
  {
   TR0=0;
  }
  while(!k1); //???????????
  if(select_function==0)
  TR0=1;
}
if(select_function==1)
{
  if(k2==0) //????ж?????????
  {
   time1++; //??? ????1,2 ????1,2 ???1,2
   if(time1>=60)
   {
    time1=0;
   }
  }
  while(!k2); //??????????
  if(k3==0) //????ж?????????
  {
    if(time1==0)time1=60;
    time1--; //??? ????1,2 ????1,2 ???1,2
  }
  while(!k3); //???????????
}
if(select_function==2)
{
  if(k2==0) //????ж?????????
  {
   time2++; //????ж?????????
   if(time2>=60)
   time2=0;
  }
  while(!k2); //???????????
  if(k3==0) //????ж?????????
  {
   if(time2==0)
   time2=60;
   time2--; //?????????????
  }
}
if(select_function==3)
{
  if(k2==0) //????ж?????????
  {
   time3++; //??? ????1,2 ????1,2 ???1,2
   if(time3>=24)
   time3=0;
  }
  while(!k2);//???????????
  if(k3==0) //????ж?????????
  {
   if(time3==0)
   time3=24;
   time3--; //??? ????1,2 ????1,2 ???1,2
  }
  while(!k3); //???????????
}
LED1=time1%10;
LED2=time1/10;
LED4=time2%10;
LED5=time2/10;
LED7=time3%10;
LED8=time3/10;
}

//??????
void main()
{
LcdInit();
show_string(display); //???time
Timer0Init();
LED1=0; //??????λ???????
LED2=0; //??????λ???????
LED4=0; //??????λ???????
LED5=0; //??????λ???????
LED7=0; //?????λ???????
LED8=0; //?????λ???????
select_function=0;
time1=0;
time2=0;
time3=0;
while(1)
{
  keypros();
  time_display();
}
}
//?????ж?
void Timer0() interrupt 1
{
static uint k=0;
TH0=0xD8; //?????????????????10ms
TL0=0xF0;
k++;
if(k==100)
{
  k=0;
  timer_calculate(); //????????
}
}

IMG_20191219_203215.jpg (6.44 MB, 下载次数: 84)

IMG_20191219_203215.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2019-12-20 08:15 | 只看该作者
一般是1602的驱动问题,先想办法点亮再调试其他功能才是王道。
1602这个东东,不是所有程序是通用的,而且每型器件都可能在时序上有点区别。
回复

使用道具 举报

板凳
ID:25310 发表于 2019-12-20 08:45 | 只看该作者
一看就是拷贝过来的,自己检查引脚定义看看,IO口配置啥的都检查一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表