您当前的位置:五五电子网电子知识单片机-工控设备综合-其它单片机液晶显示代码 正文
单片机液晶显示代码

单片机液晶显示代码

点击数:7410 次   录入时间:03-04 11:52:58   整理:http://www.55dianzi.com   综合-其它

    硬件电路:51最小系统,没有采用总线方式,直接的I/O形式,包括矩阵键盘,1602液晶,一个数码管,LED4个,蜂鸣器等.

    //单片机液晶秒表计算器完整修改版本

    可以实现两种功能的切换,其他功能自行对照代码研究。4*4矩阵键盘,第一排前三列是实现小时分钟秒的加.第二排前三列是实现小时分钟秒的减.当然还可以通过设置矩阵键盘的键值,来实现加减乘除四则运算,由数码管显示参与运算的数字以及最终的运算结果

    #include<reg51.h>

    #include<stdio.h>

    #include<stdlib.h>

    #include<intrins.h>

    #include<absaCC.h>

    #define uchar unsigned char

    #define uint unsigned int

    #define wc 0x8fff

    #define wd 0xdfff

    #define rc 0xbfff

    void displayListChar(unsigned char X, unsigned char Y, uchar DData);

    uchar dispbuf[]={''0'',''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'','':''};

    uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,

                                0x92,0x82,0xf8,0x80,0x90,0x88,0x83,

                                  0xc6,0xa1,0x86,0x8e,0x00

    };

    uchar second;

    uchar temp1; 

    uchar minute;

    uchar hour;

    uint tcnt,g;

    uchar suanfa;

    bit flag2;

    bit flag1=1;//////控制计算器还是液晶调整的状态灯

    uint i=0,f,m,g,s,t;//    for里的计数值,用于循环

        // 用来标记按了什么,如+,-.*,或是/

    sbit P2_0=P2^0;// 定义P2.0口用来,当计算值超过15时,P2.0所对应的灯闪几下

    sbit P2_1=P2^1;// 定义P2.1口用来,当除数为0时,P2.1所对应的灯闪几下

    sbit P2_2=P2^2;

    sbit P2_3=P2^3;

    uint num[4]={0}; //用于记录外面输入的数字

    uint Tablenum;

    sbit P3_4=P3^4;

    sbit P3_5=P3^5;

    void jieguo(void);

    void Settime(uchar verify);

    uchar kbsCAN(void);///键盘扫描

    void Show_Time(void);////显示时间

    void Settime(uchar verify);//verify 在这里为调整的意思

    uint transfor( uchar key1);

    void delay400ms(void) ;

    void delay200ms(void);

    void delay5ms(void);

    void delay_1s(void);

    void dlms(void);

    void dlms1(void)

    {   

          uint g=20000;

          while(--g);  //延时100mS钟

    }

    void clr(void)

    {

      i=0;

      suanfa=0;

      Tablenum=0;

      for(f=0;f<4;f++)

      {

        num[f]=0;

      }

          P2_0=1;

          P2_1=1;

          P2_2=1;

        P2_3=0;

      P3_4=0;

      P3_5=1;

      P0=0xc0;

      P3_5=0;

    }



www.55dianzi.com

    //***************************************以下单片机液晶显示****************************************************

    void waitLCD()                    //just wait until 液晶不忙为止

      {

        char temp;

        bit flag=1;

        while(flag==1)

        {

          temp=XBYTE[rc];

          if (temp>>7==0) flag=0;

          P1=temp;

        }

          P1=0xff;

      }

                                        //just wait until 液晶不忙为止

    void WriteCommand_Lcd(bit isCheck,char c)   

      {

        if (isCheck==1) waitLcd();

        XBYTE[wc]=c;

      }

    void writEDAta(char c)

    {

        waitLcd();

        XBYTE[wd]=c;

    }

    void LcdInit()

      {

        delay5ms();

      delay5ms();

     delay5ms();

     WriteCommand_Lcd(0,0x38); //三次显示模式设置,不检测忙信号

     delay5ms();

     WriteCommand_Lcd(0,0x38);

     delay5ms();

     WriteCommand_Lcd(0,0x38);

     delay5ms();

     WriteCommand_Lcd(1,0x38); //显示模式设置,开始要求每次检测忙信号,8位2行5*7

     WriteCommand_Lcd(1,0x08); //关闭显示

     WriteCommand_Lcd(1,0x01); //清显示

     WriteCommand_Lcd(1,0x06); // 文字不动,光标右移

     WriteCommand_Lcd(1,0x0C); // 显示开及光标设置

      }

    void displayListChar(unsigned char X, unsigned char Y, uchar DData)

      {

     Y &= 0x1;

     X &= 0xF;

     if (X <= 0xF)

      {

        Y &= 0x1;

     X &= 0xF;

     if (Y) X = 0x40;

     X = 0x80;

     WriteCommand_Lcd(0,X);

     writedata(dispbuf[DData]);

        }

     }

    //****************************************以上单片机液晶显示驱动*****************************************************

    //*************************************************

    //**********************************以下显示时间*****************************************************

    void Show_Time(void)

    {

      displayListChar(0,0,hour/10);

      displayListChar(1,0,hour%10);

      displayListChar(2,0,10);

      displayListChar(3,0,minute/10);

      displayListChar(4,0,minute%10);

      displayListChar(5,0,10);

      displayListChar(6,0,second/10);

      displayListChar(7,0,second%10);

     }

    //**********************************以上显示时间*****************************************************



www.55dianzi.com


void main(void)

     

    { 

        TMOD=0x02; //置自动重装载模式

        TH0=0x06;  //设初值

        TL0=0x06;  //设初值

        TR0=1;    //开始计数

[1] [2]  下一页


本文关键字:单片机  综合-其它单片机-工控设备 - 综合-其它