当前位置:首页 > 单片机 > 单片机
[导读]单片机液晶显示程序硬件电路:51最小系统,没有采用总线方式,直接的I/O形式,包括矩阵键盘,1602液晶,一个数码管,LED4个,蜂鸣器等.//单片机液晶秒表计算器完整修改版本可以实现两种功能的切换,其他功能自行对照代码研究。

单片机液晶显示程序

硬件电路: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;

}

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

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);

 }

//**********************************以上显示时间*****************************************************void main(void)

{  

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

    TH0=0x06;   //设初值

    TL0=0x06;  //设初值

    TR0=1;     //开始计数

    ET0=1;    //开定时器/计数器

    EA=1;     //中断开

    delay400ms();//启动等待,等LCM讲入工作状态

    LcdInit();     //LCM初始化 

       P3_4=0;

       P2_0=1;

       P2_1=1;

       P2_2=0;

    P2_3=1;

    P3_5=1;

       P0=0xc0;

       P3_5=0;   

    while(1)

   { 

       uchar key;

         key=kbscan();

          dlms();

         // 0(11100111  0xe7)        

         ///*****************************以下是单片机液晶显示两种状态的切换********************

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

         if(key==0xe7)

         {

            dlms();

            flag1=~flag1;

            key=0x00;   

               if(flag1==1)

                {           

                      P2_0=1;

                P2_1=1;

                P2_2=0;///液晶状态灯

             P2_3=1;

                }        

                if(flag1==0)

                {

                  P2_0=1;

               P2_1=1;

              P2_2=1;

            P2_3=0;///计算器状态灯

                }

               dlms1();

          }

         ///*****************************以上是单片机液晶显示两种状态的切换

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

凭借深度学习技术和SmartBid产品,百度国际MediaGo获得美国商业奖认可 旧金山2024年5月6日 /美通社/ -- 第22届美国商业奖(American Business Award®)近日发布获奖名...

关键字: MEDIA GO SMART BSP

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

上海2024年4月17日 /美通社/ -- 在2024 F1中国站即将拉开帷幕之际,高端全合成润滑油品牌美孚1号今日举办了品牌50周年庆祝活动。三届F1年度车手总冠军马克斯•维斯塔潘也亲临现场,共同庆祝这一里程...

关键字: BSP 汽车制造 行业标准 产品系列

北京2024年4月17日 /美通社/ -- 2024年4月13日,由北京康盟慈善基金会主办的"县域诊疗,规范同行"——肿瘤诊疗学术巡讲项目首站在广州隆重召开。本次会议邀请全国多位肺癌领域专家和县域同道...

关键字: AI技术 医疗服务 BSP 互联网

海口2024年4月16日 /美通社/ -- 4月14日,在中法建交60周年之际,科学护肤先锋品牌Galenic法国科兰黎受邀入驻第四届中国国际消费品博览会(以下简称"消博会")法国馆。Galenic法...

关键字: NI IC BSP ACTIVE

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP
关闭
关闭