⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hgfgd.txt

📁 E-1330点阵液晶屏驱动程序,HT1380实时时钟驱动程序
💻 TXT
字号:
1  E-1330点阵液晶屏驱动程序
2  HT1380实时时钟驱动程序
3  ht9200b驱动程序
4  按键扫描驱动程序

//E-1330点阵液晶屏驱动程序/*
线路图
  89C51              E-1330
--------
        |    8
P1.0-1.7|=========== D0-7
        |
    P3.0|----------- A0
    P3.1|----------- R/W
    P3.2|----------- E
        |        -- /CS
        |        |
        |        ---
        |  反相器
  RESET    |----|>。--- /RES
--------
*/
#include <reg51.h>

sbit p_a0=P3^0;
sbit p_rw=P3^1;
sbit p_e=P3^2;


//指令写入函数
void ctrl(unsigned char c) {
    p_a0=1;            //a0为1代表写入指令
    p_rw=0;
    p_e=1;P1=c;p_e=0;
}
//数据和指令参数写入函数
void write(unsigned char d) {
    p_a0=0;            //a0为0代表写入数据或指令参数
    p_rw=0;
    p_e=1;P1=d;p_e=0;
}
//数据和光标地址读出函数
unsigned char read(void) {
    unsigned char rd;
    p_a0=1;            //a0为1代表读数据和光标地址,a0为0代表读状态标志,由于E-1330功能很强,一般不用读状态标志
    p_rw=1;
    P=0xff;            //把P1置为高电平,只有置为高电平才能正确读入数据
    p_e=1;rd=P1;p_e=0;
    return(rd);
}

/*    
    其他函数可以根据资料自行组合,
    如设置CGROM相对地址为0000H,用以下语句即可:
    ctrl(0x5c);        //写入5C指令
    write(0);
    write(0);        //写入5C指令的参数0000
*/



//HT1380实时时钟驱动程序

sbit clock_dat=P0^1;
sbit clock_clk=P0^2;
sbit clock_rst=P0^3;

sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;

void clock_out(unsigned char dd) {
    ACC=dd;
    clock_dat=a0;clock_clk=1;clock_clk=0;
    clock_dat=a1;clock_clk=1;clock_clk=0;
    clock_dat=a2;clock_clk=1;clock_clk=0;
    clock_dat=a3;clock_clk=1;clock_clk=0;
    clock_dat=a4;clock_clk=1;clock_clk=0;
    clock_dat=a5;clock_clk=1;clock_clk=0;
    clock_dat=a6;clock_clk=1;clock_clk=0;
    clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char clock_in(void) {
    clock_dat=1;
    a0=clock_dat;
    clock_clk=1;clock_clk=0;a1=clock_dat;
    clock_clk=1;clock_clk=0;a2=clock_dat;
    clock_clk=1;clock_clk=0;a3=clock_dat;
    clock_clk=1;clock_clk=0;a4=clock_dat;
    clock_clk=1;clock_clk=0;a5=clock_dat;
    clock_clk=1;clock_clk=0;a6=clock_dat;
    clock_clk=1;clock_clk=0;a7=clock_dat;
    return(ACC);
}
unsigned char read_clock(unsigned char ord) {
    unsigned char dd=0;
    clock_clk=0;
    clock_rst=0;
    clock_rst=1;
    clock_out(ord);
    dd=clock_in();
    clock_rst=0;
    clock_clk=1;
    return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) {
    clock_clk=0;
    clock_rst=0;
    clock_rst=1;
    clock_out(ord);
    clock_out(dd);
    clock_rst=0;
    clock_clk=1;
}



//ht9200b驱动程序

sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;

sbit dtmf_dat=P2^6;
sbit dtmf_clk=P2^7;
sbit dtmf_ce=P2^4;
void out_dtmf(unsigned char dd) {    
    ACC=dd;
    dtmf_dat=a0;dtmf_clk=0;dtmf_clk=1;
    dtmf_dat=a1;dtmf_clk=0;dtmf_clk=1;
    dtmf_dat=a2;dtmf_clk=0;dtmf_clk=1;
    dtmf_dat=a3;dtmf_clk=0;dtmf_clk=1;
    dtmf_dat=a4;dtmf_clk=0;dtmf_clk=1;
}



//按键扫描驱动程序

unsigned char key,key_h,kpush;
unsigned int key_l;

//按键连接到p1.0、p1.1、p1.2

void int_t0(void) interrupt 1 {
    unsigned char dd,i;
    TL0=TL0+30;TH0=0xfb;    //800
    /*    按键判别    */
    if ((P1&0x7)==0x7) {
        if ((key_l>30)&&(key_l<800)&&(key_h>30)) {    //释放按键,如果之前按键时间少于1秒,读入键值
            key=kpush;
        }
        if ((++key_h)>200) key_h=200;
        key_l=0;
        if (key>=0x80) key=0;        //如果之前的按键为长按1秒,清除键值
    } else {
        kpush=P1&0x7;
        key_l++;
        if ((key_l>800)&&(key_h>30)) {    //如果按键超过1秒,键值加0x80标志长按键
            key=kpush|0x80;
            key_h=0;
            key_l=0;
        }
    }
}
void main(void) {
    TMOD=0x1;TR0=1;ET0=1;EA=1;
    while (1) {
        while (!key) {}
        switch (key) {
        case 1:break;
        case 2:break;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -