请问我这个仿真或者程序哪里有问题呢

2019-07-15 18:43发布

我打算用89c52做个电子表 ,就显示时间就是。显示屏用的是lcd1602.

程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a}; /*CGROM中0~9中的字符码 和 : */
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
uchar hour2,hour1, min2,min1,sec2, sec1,num,num1,num2,aa;

void delay(uint z)  /*延时 z ms*/
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void lcd_com(uchar com) /*在P1口写命令 ,如: lcd_com(0x38) 【初始化命令】*/
{
    rs=0;
    rw=0;
    P1=com;
    delay(1);
    e=1;
    e=0;
}
void lcd_dat(uchar dat) /*在P1口写数据*/
{
    rs=1;
    rw=0;
    P1=dat;
    delay(1);
    e=1;
    e=0;
}
void init()
{
    lcd_com(0x38);    /*置功能: 8位总线、双行显示、5*7点阵字符*/
    delay(1);
    lcd_com(0x0c);    /*显示开关控制:整体显示开、光标无、光标不闪 */
    delay(1);
   lcd_com(0x01);         /*清显示*/
    delay(1);
    TMOD=0X01;                           /*方式寄存器:
                                                             设置定时器0采用16位定时方式,定时器通过TR0置位启动
                                 设置定时器1采用13位定时方式,定时器通过TR1置位启动*/

        /*设初值为50000,定时50ms*/
        TH0=(65536-50000)/256;  /* 高8位,TH1 = 60 (0011 1100)*/
    TL0=(65536-50000)%256;  /* 低8位,TL1 = 176(0001 0000) */

        EA=1;   /*CPU中断总允许位 , CPU开放所有中断源的中断请求*/
    ET0=1;  /*定时器T0中断允许位,允许定时器T0中断*/
    TR0=1;  /*启动定时器0*/


}
void display(uchar hour2,uchar hour1,uchar min2,uchar min1,uchar sec2,uchar sec1)
{

        lcd_com(0x80);       /*在00H地址处显示数据*/
    lcd_dat(table[hour2]);


        lcd_com(0x81);
    lcd_dat(table[hour1]);

    lcd_com(0x82);
    lcd_dat(table[10]);  /*显示 :*/

    lcd_com(0x83);
    lcd_dat(table[min2]);

    lcd_com(0x84);
    lcd_dat(table[min1]);

    lcd_com(0x85);
    lcd_dat(table[10]);  /*显示 :*/

    lcd_com(0x86);
    lcd_dat(table[sec2]);

    lcd_com(0x87);
    lcd_dat(table[sec1]);


}
void main()
{
    init();
    while(1)
    {

    if(aa==20)
    {
        aa=0;
        num++;    /*秒 + 1*/

        if(num==60)
        {
            num=0;
            num1++;

            if(num1==60)
            {
                num1=0;

                num2++;
                if(num2==24)
                {
                num2=0;
               }

            }


        }
        hour2=num2/10;
        hour1=num2%10;
        min2=num1/10;
        min1=num1%10;
        sec2=num/10;
        sec1=num%10;
         }

    display(hour2,hour1,min2,min1,sec2,sec1);

}


}

/*中断服务程序*/
void timer0() interrupt 1         
{
   TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    aa++;

}



仿真时屏幕只是亮却不显示任何数字。
请问是哪出问题了?
仿真图 仿真图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
愚蠢的萝卜
1楼-- · 2019-07-15 19:47
附lac1602的中文资料

LCD1602液晶完整中文资料.pdf 下载积分: 积分 -1 分

344.19 KB, 下载次数: 6, 下载积分: 积分 -1 分

lcd1602中文资料

阿信509
2楼-- · 2019-07-15 23:00
咱论坛里有人做出来了,你对照下程序和仿真图,看有没问题

一周热门 更多>