单片机液晶显示代码

发布者:TranquilWhisper最新更新时间:2012-06-25 来源: 21ic 关键字:单片机  液晶显示  51最小系统 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

#include

#include

#include

#include

#include

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

}[page]

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

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

 }

//**********************************以上显示时间*****************************************************[page]

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

          }

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

关键字:单片机  液晶显示  51最小系统 引用地址:单片机液晶显示代码

上一篇:单片机基本结构及C语言编程基础
下一篇:利用单片机从LCD显示屏上读出所测得电阻值解析方案

推荐阅读最新更新时间:2024-03-16 13:02

PIC16位单片机CAN(1)新建工程测试
昨天焊接了硬件,硬件没有什么问题。起初使用最新的集成开发环境MPLAB X IDE v1.41,XC16编译器。但是新建简单的工程都不行,找不到KIT3。只好放弃。还是使用MPLAB IDE v8.88集成开发环境吧,依然是XC16编译器。 由MPLAB IDE v8.88的工程向导新建一个工程。选择单片机和编译器之后开始写一个IO口程序控制LED看看有没有硬伤。好久不用PIC了,都忘了怎么使用了。 1:添加相应的头文件 2:写配置位(时钟,仿真口等) 3:写测试程序。 总是忘了写配置位,根据文档写完配置位之后LED终于点亮了!! #include p33EP32GP502.h _FICD(ICS_PGD
[单片机]
Microchip扩展高性能32位MCU,新系列器件集成浮点单元
48款PIC32MZ EF系列新器件集成2 MB闪存、512 KB RAM、18 MSPS 12位ADC、FPU、加密引擎、高速USB、10/100以太网、CAN及多种同类最佳外设选择 单片机、混合信号、模拟器件和闪存专利解决方案的供应商 Microchip Technology Inc.(美国微芯科技公司)日前宣布扩展旗下高性能PIC32MZ系列32位单片机(MCU)产品。新系列器件集成了一个硬件浮点单元(FPU),有助密集型单精度和双精度运算应用同时实现高性能和更低的延迟。此次推出的PIC32MZ EF系列有48款新器件,均具有一个适用于多种高速高带宽应用的12位18 MSPS模数转换器(ADC)。此外,PIC3
[单片机]
基于AVR单片机的125 kHz简易RFID阅读器设计
0 引言 无线射频识别(Radio Frequency Identification,RFID)是利用感应、电磁场或电磁波为传输手段,完成非接触式双向通信、获取相关数据的一种自动识别技术。该技术完成识别工作时无须人工干预,易于实现自动化且不易损坏,可识别高速运动物体并可同时识别多个射频卡,操作快捷方便,已经得到了广泛的应用。 目前存在的一些读卡器,都需要读卡芯片作为基站,成本较高。本文介绍了一种采用分立元件构成的125 kHz RFID阅读器,电路结构简单,成本极低,用于读取EM4100型ID卡。 1 RFID系统的分类 RFID系统的分类方法有很多,在通常应用中都是根据频率来分,根据不同的工作频率,可将
[单片机]
网络单片机PIC18F97J60的开发与应用
Microchip公司生产的PICl8F97J60单片机将PIC18系列高端8位单片机与完整的以太网控制器集成在一起,并且包括了MAC、PHY和RAM收发缓冲器。利用这一64或100引脚封装的系列器件享有的完善网络连接功能,可以实现成本低、简单易用的以太网应用方案。此外,利用Microchip公司免费提供的TCP/IP软件栈,能够大大缩短开发时间。 1 PICl8F97J60网络单片机 1.1 网络特性 PICl8F97J60系列器件具有嵌入式以太网控制器模块。这是一个完整的连接解决方案,完全实现了介质访问控制(Media Access Control,MAC)和物理层收发器(Physical Layer Tr
[单片机]
网络<font color='red'>单片机</font>PIC18F97J60的开发与应用
51单片机简单I/O实验实例源程序
一.实验要求 以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。 二.实验目的 1.学习在单片机系统中扩展简单I/O接口的方法。 2.学习数据输出程序的设计方法。 3.学习模拟交通灯控制的方法。 4.学习双色灯的使用。 三.实验电路及连线 四.实验说明 1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循
[单片机]
<font color='red'>51</font><font color='red'>单片机</font>简单I/O实验实例源程序
第六节:PIC系列单片机预分频器Prescaler
预分频器是一个分频倍数可编程的8位计数器。其结构如图1.9所示上节对预分频参数已有描述,这里不赘述。 预分频器的分配对象完全由程序控制。可以在程序中改变预分频器分配对象。 1、从RTCC到WDT的改变 MOVLW B'XX0X0XXX' ;选择内部时钟和新的预分频值 OPTION ;如果新的预分频值= 000 或者 CLRF RTCC ;= 001 ,则暂时先选一个另外的值 MOVLW B'XXXX1XXX' ;清零RTCC和预分频器 OPTION ;选择WDT为对象,但不要改变预分频值 CLRWDT ;清WDT和预分频器 MOVLW B'XXXX1XXX' ;选择新的预分频值
[单片机]
第六节:PIC系列<font color='red'>单片机</font>预分频器Prescaler
LCD12864万年历单片机程序+实物制作+Proteus仿真
制作出来的LCD12864万年历实物图如下: LCD12864万年历仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 电路原理图如下: 单片机源程序如下: *----------------------------------------------- 名称:12864字库液晶显示 内容:通过显示字符、数字、汉字和图片测试液晶基本功能 ------------------------------------------------*/ #include reg52.h #include intrins.h #include delay.h sbit RS = P3^5; sbit RW = P3
[单片机]
LCD12864万年历<font color='red'>单片机</font>程序+实物制作+Proteus仿真
C8051F350单片机实现气体流量计检测仪的设计
气体流量计是较为常用的仪表设备。钟罩式气体流量标准装置是以空气作为介质,对气体流量计进行检定、校准和检测的计量标准装置。主要适用于速度式、容积式和差压式等气体流量计的检定、校准和型式评价工作,也可用于气体流量测量的研究工作。本文基于C8051F350单片机,改造现有的钟罩装置,设计一种气体流量计检测仪。 气体流量计检定技术概述 目前,气体流量计的检定方法广义上可分为直接测量和间接测量两种。 直接测量法的是用实际流体进行计量检定,其具体定义为用标准装置(标准流量计或计量器具)与被测流量计串联,通过比较两者测得流体的累积流量值,得出被测流量计测量误差的方法。实流检测法具有检定环境与工况环境一致、流量值准确可靠和真实反映被测流量计计
[单片机]
C80<font color='red'>51</font>F350<font color='red'>单片机</font>实现气体流量计检测仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved