51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
按键计数(lcd)
作者:佚名  发布时间:2008/12/9  阅读次数:972  字体大小: 【】 【】【


//程序功能:液晶5位显示,每个按键对应一位。按一下按键,相应位加1,可进位。超出量程,则清0
#include "reg52.h"

#define uchar unsigned char

typedef bit BOOL   ;
sbit Key1= P3^2;
sbit Key2= P3^3;
sbit Key3= P3^4;
sbit Key4= P3^5;
sbit Key5= P3^7;
sbit rs   = P2^6 ;
sbit rw   = P3^6 ;
sbit ep   = P2^7 ;
//各位计数变量
uchar   dis[5]={0x30,0x30,0x30,0x30,0x30};

void delay(uchar ms)
{             // 延时子程序
   uchar i ;
   while(ms--)
   {
       for(i = 0 ; i<250;i++) ;
   }
}

BOOL lcd_bz()
{             // 测试LCD忙碌状态
   BOOL result ;
   rs = 0 ;
   rw = 1 ;
   ep = 1 ;
   result = (BOOL)(P0 & 0x80) ;
   ep = 0 ;
   return result ;
}
void lcd_wcmd(uchar cmd)
{             // 写入指令数据到LCD
    while(lcd_bz()) ;
  rs = 0 ;
  rw = 0 ;
  ep = 0 ;
  P0 = cmd ;
  ep = 1 ;
  ep = 0 ;  
}

void lcd_pos(uchar pos)
{             //设定显示位置
    lcd_wcmd(pos | 0x80) ;
}

void lcd_wdat(uchar dat)
{             //写入字符显示数据到LCD
    while(lcd_bz()) ;
     rs = 1 ;
     rw = 0 ;
     ep = 0 ;
     P0 = dat ;
     ep = 1 ;
     ep = 0 ;
}

void lcd_init()
{             //LCD初始化设定
   lcd_wcmd(0x38) ;     //function set
   delay(1) ;
   lcd_wcmd(0x38) ;     //function set
   delay(1) ;
   lcd_wcmd(0x08) ;     //display on/off
   delay(1) ;
   lcd_wcmd(0x01) ;     //清除LCD的显示内容
   delay(1) ;
   lcd_wcmd(0x06) ;     //entry mode set
   delay(1) ;
   lcd_wcmd(0x0c) ;     //entry mode set
   delay(1) ;
}

/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos, uchar *q)
{
   uchar i ;
   //lcd_wcmd(0x01) ; //clear
   delay(10) ;
   lcd_pos(pos) ;
   for(i=0;i<5;i++)
   {
       lcd_wdat(*q) ;
       q++ ;
       delay(10) ;
   }
}

void main()
{
  Key1=1;
  Key2=1;
  Key3=1;
  Key4=1;
  lcd_init() ;       // 初始化LCD  
  while(1)     //循环执行
    {
    if(!Key1)//如果键1按下,下同
    {    
      while(!Key1);
      ++dis[0];
    }
    if(!Key2)
    {
      while(!Key2);
      ++dis[1];
    }
    if(!Key3)
    {      
      while(!Key3);
      ++dis[2];
    }
    if(!Key4)
    {
      while(!Key4);
      ++dis[3];
    }
    if(!Key5)
    {
      while(!Key5);
      ++dis[4];
    }
    if((dis[0]-0x30)>9)//个位进位,下同
    {
      dis[0]=0x30;
      ++dis[1];
    }
    if((dis[1]-0x30)>9)
    {
      dis[1]=0x30;
      ++dis[2];
    }
    if((dis[2]-0x30)>9)
    {
      dis[2]=0x30;
      ++dis[3];
    }
    if((dis[3]-0x30)>9)
    {
      dis[3]=0x30;
      ++dis[4];
    }
    if((dis[4]-0x30)>9)
    {
      dis[0]=0x30;
      dis[1]=0x30;
      dis[2]=0x30;
      dis[3]=0x30;
      dis[4]=0x30;
    }
         display(0x00,dis);         //只须调用显示函数
       }
}

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号