访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
(转)XD5101实验三----按键计数(lcd显示)
内容导读:

程序功能:液晶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);     //只须调用显示函数
    }
}

 

文件名:按键计数(lcd).rar

标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐