欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: Proteus仿真 LCD1602顯示問(wèn)題 [打印本頁(yè)]

作者: QIANDUPDUO    時(shí)間: 2024-4-30 19:07
標(biāo)題: Proteus仿真 LCD1602顯示問(wèn)題
用52單片機(jī)做作息時(shí)間控制器
用protues仿真發(fā)現(xiàn)時(shí)間顯示界面可以正常修改,但是切換到鬧鐘設(shè)置界面
時(shí)鐘顯示I5-I5,且不能修改,請(qǐng)問(wèn)這是為什么呢

#include "lcd1602.h"


/*******************************************************************************
* 函 數(shù) 名       : lcd1602_write_cmd
* 函數(shù)功能                 : LCD1602寫(xiě)命令
* 輸    入       : cmd:指令
* 輸    出             : 無(wú)
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{
        LCD1602_RS=0;//選擇命令
        LCD1602_RW=0;//選擇寫(xiě)
        LCD1602_E=0;
        LCD1602_DATAPORT=cmd;//準(zhǔn)備命令
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入        
}
#else        //4位LCD
void lcd1602_write_cmd(u8 cmd)
{
        LCD1602_RS=0;//選擇命令
        LCD1602_RW=0;//選擇寫(xiě)
        LCD1602_E=0;
        LCD1602_DATAPORT=cmd;//準(zhǔn)備命令
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入
        
        LCD1602_DATAPORT=cmd<<4;//準(zhǔn)備命令
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入        
}
#endif

/*******************************************************************************
* 函 數(shù) 名       : lcd1602_write_data
* 函數(shù)功能                 : LCD1602寫(xiě)數(shù)據(jù)
* 輸    入       : dat:數(shù)據(jù)
* 輸    出             : 無(wú)
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{
        LCD1602_RS=1;//選擇數(shù)據(jù)
        LCD1602_RW=0;//選擇寫(xiě)
        LCD1602_E=0;
        LCD1602_DATAPORT=dat;//準(zhǔn)備數(shù)據(jù)
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入               
}
#else
void lcd1602_write_data(u8 dat)
{
        LCD1602_RS=1;//選擇數(shù)據(jù)
        LCD1602_RW=0;//選擇寫(xiě)
        LCD1602_E=0;
        LCD1602_DATAPORT=dat;//準(zhǔn)備數(shù)據(jù)
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入
        
        LCD1602_DATAPORT=dat<<4;//準(zhǔn)備數(shù)據(jù)
        delay_ms(1);
        LCD1602_E=1;//使能腳E先上升沿寫(xiě)入
        delay_ms(1);
        LCD1602_E=0;//使能腳E后負(fù)跳變完成寫(xiě)入               
}
#endif

/*******************************************************************************
* 函 數(shù) 名       : lcd1602_init
* 函數(shù)功能                 : LCD1602初始化
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{
        lcd1602_write_cmd(0x38);//數(shù)據(jù)總線8位,顯示2行,5*7點(diǎn)陣/字符
        lcd1602_write_cmd(0x0c);//顯示功能開(kāi),無(wú)光標(biāo),光標(biāo)閃爍
        lcd1602_write_cmd(0x06);//寫(xiě)入新數(shù)據(jù)后光標(biāo)右移,顯示屏不移動(dòng)
        lcd1602_write_cmd(0x01);//清屏        
}
#else
void lcd1602_init(void)
{
        lcd1602_write_cmd(0x28);//數(shù)據(jù)總線4位,顯示2行,5*7點(diǎn)陣/字符
        lcd1602_write_cmd(0x0c);//顯示功能開(kāi),無(wú)光標(biāo),光標(biāo)閃爍
        lcd1602_write_cmd(0x06);//寫(xiě)入新數(shù)據(jù)后光標(biāo)右移,顯示屏不移動(dòng)
        lcd1602_write_cmd(0x01);//清屏        
}
#endif

/*******************************************************************************
* 函 數(shù) 名       : lcd1602_clear
* 函數(shù)功能                 : LCD1602清屏
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void lcd1602_clear(void)
{
        lcd1602_write_cmd(0x01);        
}

/*******************************************************************************
* 函 數(shù) 名       : lcd1602_show_string
* 函數(shù)功能                 : LCD1602顯示字符
* 輸    入       : x,y:顯示坐標(biāo),x=0~15,y=0~1;
                                   str:顯示字符串
* 輸    出             : 無(wú)
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
        u8 i=0;

        if(y>1||x>15)return;//行列參數(shù)不對(duì)則強(qiáng)制退出

        if(y<1)        //第1行顯示
        {        
                while(*str!='\0')//字符串是以'\0'結(jié)尾,只要前面有內(nèi)容就顯示
                {
                        if(i<16-x)//如果字符長(zhǎng)度超過(guò)第一行顯示范圍,則在第二行繼續(xù)顯示
                        {
                                lcd1602_write_cmd(0x80+i+x);//第一行顯示地址設(shè)置        
                        }
                        else
                        {
                                lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行顯示地址設(shè)置        
                        }
                        lcd1602_write_data(*str);//顯示內(nèi)容
                        str++;//指針遞增
                        i++;        
                }        
        }
        else        //第2行顯示
        {
                while(*str!='\0')
                {
                        if(i<16-x) //如果字符長(zhǎng)度超過(guò)第二行顯示范圍,則在第一行繼續(xù)顯示
                        {
                                lcd1602_write_cmd(0x80+0x40+i+x);        
                        }
                        else
                        {
                                lcd1602_write_cmd(0x80+i+x-16);        
                        }
                        lcd1602_write_data(*str);
                        str++;
                        i++;        
                }        
        }                                
}





#ifndef _lcd1602_H
#define _lcd1602_H

#include "public.h"

//LCD1602數(shù)據(jù)口4位和8位定義,若為1,則為L(zhǎng)CD1602四位數(shù)據(jù)口驅(qū)動(dòng),反之為8位
#define LCD1602_4OR8_DATA_INTERFACE        0        //默認(rèn)使用8位數(shù)據(jù)口LCD1602

//管腳定義
//sbit LCD1602_RS=P2^6;//數(shù)據(jù)命令選擇
//sbit LCD1602_RW=P2^5;//讀寫(xiě)選擇
//sbit LCD1602_E=P2^7; //使能信號(hào)

sbit LCD1602_RS=P2^0;//數(shù)據(jù)命令選擇
sbit LCD1602_RW=P2^1;//讀寫(xiě)選擇
sbit LCD1602_E=P2^2; //使能信號(hào)

#define LCD1602_DATAPORT P0        //宏定義LCD1602數(shù)據(jù)端口


//函數(shù)聲明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);

#endif




#ifndef __TIME_H
#define __TIME_H

#include "public.h"

void time0_init(void);

#endif



#include "time.h"

void time0_init(void)
{
        TMOD|=0X01;
        TH0=0xDC;
        TL0=0x00;//定時(shí)10ms
        ET0=1;
        EA=1;
        TR0=1;                                
}




1111111111111.png (104.03 KB, 下載次數(shù): 38)

鬧鐘設(shè)置不了

鬧鐘設(shè)置不了

22222222222222.png (101.33 KB, 下載次數(shù): 50)

時(shí)間可以正常設(shè)置

時(shí)間可以正常設(shè)置





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1