单片机液晶显示程序

发布者:和谐相处最新更新时间:2011-11-04 关键字:单片机  液晶显示 手机看文章 扫描二维码
随时随地手机看文章

单片机液晶显示程序

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

          }

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

 

 

关键字:单片机  液晶显示 引用地址:单片机液晶显示程序

上一篇:什么是fifo fifo什么意思 GPIF和FIFO的区别
下一篇:pc计算机与单片机串口通信源程序

推荐阅读最新更新时间:2024-03-16 12:45

ATtiny13 空闲模式
当SM1..0 为00 时,SLEEP 指令将使MCU 进入空闲模式。在此模式下,ATtiny13 CPU 停止运行,而模拟比较器、ADC、定时器 计数器、看门狗和中断系统继续工作。这个休眠模式只停止了clkCPU和clkFLASH,其他时钟则继续工作。 象定时器溢出等内外部中断都可以唤醒 MCU。如果不需要从模拟比较器中断唤醒 MCU, 为了减少功耗,可以切断比较器的电源。方法是置位模拟比较器控制和状态寄存器 ACSR 的 ACD。如果 ADC 使能,进入此模式后将自动启动一次转换。
[单片机]
GigaDevice发布多款GD32F103和GD32F101系列大容量增强型MCU
    2013 年 9 月 25 日 — 业界领先的半导体供应商 GigaDevice ( 兆易创新 ) 日前在北京发布基于 108MHz ARM Cortex-M3 内核的多款大容量增强型 GD32F103 和 GD32F101 系列微控制器新品。目前,该系列产品已经开始提供样片并将于下月正式投入量产。   新发布的 GD32F103/GD32F101 系列大容量增强型 MCU 片上闪存容量从 256KB 起最大可至 3072KB ,这也是迄今为止业界最大容量的 Cortex-M3 内核通用微控制器。高性能高可靠性的片上 Flash 可重复擦写 100000 次,保存数据超过 20 年。 CPU 访问闪
[手机便携]
PIC单片机串行口使用
#include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(); void main() { init(); TXREG=0x31; while(!TRMT); while(1); } void init() { TRISC=0xff; TXSTA=0x24; RCSTA=0x90; SPBRG=25; GIE=1; PEIE=1; RCIE=1; } void interrupt com() { if(RCIE&&RCIF) { TXREG=RCREG; while(
[单片机]
一种简易温室控制系统的设计
温室是一种可以改变植物生长环境,为植物生长创造更好条件、避免外界四季变化和恶劣气候对其影响的场所。随着社会经济的发展,各种园艺温室和农作物温室的数量在不断的增加,目前这些温室环境的控制大部分仍靠人工经验来进行手动控制,这种控制方式生产效率低下,单位产品的生产成本偏高,严重影响了农业生产的效益,阻碍了农业生产的发展。因此采用智能温室控制代替手工控制是现代温室发展的一个必然趋势,而当今国内常见的智能温室系统都是采用工控机或者PLC方案,其控制成本高,性价比低,较大部分用户经济能力承受不起。为此本文在综合考虑系统的测量精度、生产效率以及成本等多方面因素之后,设计了一种基于STC89E55RD+单片机的低成本简易温室控制系统。其成本较工
[单片机]
一种简易温室控制系统的设计
基于单片机改造迈氏干涉仪自动测量微小长度
0 引言 薄膜厚度是薄膜性能参数的重要指标,如何准确、快速、方便地测量膜厚在实验中具有十分重要的意义。迈克尔逊干涉仪测量激光波长是大学物理实验中重要的一部分,实验时实验者手动调节微调手轮,人眼观察干涉条纹,带来很多人为误差,影响测量结果。为了保护实验者视力,提高测量精度,扩大测量范围,同时促进光学教学实验仪器的发展,在研究单片机的基础上,对迈克尔逊干涉仪进行了探索和改造。 改造后的迈克尔逊干涉仪在不改变物理学基本原理的基础上,增加了电子技术中的大量元素,使物理学和电子技术很好地结合起来,实现了对激光波长和薄膜厚度的自动测量。测量简便、精确度高,有一定的实用性。 1 系统工作原理 基于单片机改造的迈克尔干涉仪进行微小长度的
[单片机]
基于<font color='red'>单片机</font>改造迈氏干涉仪自动测量微小长度
MCS-51单片机的算术运算指令解析
MCS-51具有强大的加、减、乘、除四则算术运算指令。 1.程序状态字PSW MCS-51有一个程序状态字寄存器PSW,用来保存指令执行结果的标志,供程序查讯和判别。PSW是特殊功能寄存器中的一个,其格式如下: PSW7--既是布尔处理机的累加器C,又是进位标志CY,如果操作结果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”CY。 AC--辅助进位(半进位)标志。如果操作结果的低4位有进位(加法时)或向高4位借位时(减法),置AC,否则清“0”AC,AC主要用于二-十进制数加法调整。 OV--溢出标志。如果操作结果有进位进入最高位,但最高位没有产生进位,或者最高位产生进位而低位没有向最高位进位,这时置位溢
[单片机]
32位单片机简介
近年来,各个计算机生产厂家已进入更高性能的32位单片机研制、生产阶段。由于控制领域对32位单片机需求并不十分迫切,所以32位单片机的应用并不很多。 需要提及的是,单片机的发展虽然按先后顺序经历了4位、8位、16位的阶段,但从实际使用情况看,并没有出现推陈出新、以新代旧的局面。4位、8位、16位单片机仍各有应用领域,如4位单片机在一些简单家用电器、高档玩具中仍有应用,8位单片机在中、小规模应用场合仍占主流地位,16位单片机在比较复杂的控制系统中才有应用
[单片机]
单片机RAM(随机存取存储器)
名称   RAM(随机存取存储器)   RAM -random access memory 随机存储器 定义   存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。   按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。 随机存储器特点 随机存取   所谓“随机存取”,指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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