中国器件网
  所在位置:论坛首页 -> 嵌入式系统讨论区 -> 人机界面 -> [原创]LCD数字显示计数器
发表新的主题 回复话题
标题:[原创]LCD数字显示计数器
hodys
等级:骑士
权限:版主
积分:1332
金钱:0
声望:0
经验:1164
发帖数:211
注册时间:2006年7月8日
收藏 编辑 删除 楼主 | 上一篇 下一篇

/*
标题:LCD数字显示计数器(可计数到16位,这里根据本设计的需要只用6位)
版本:1.0
Target:89S51 or 89c51           
程序描述:这个程序说明如何使用8051 的Port 1连接LCD显示器,PORT 3.3、P3.4和P3.5则连接到LCD显示器的控制线。
    其中PORT 3.2为外部中断的输入脚。
*/
/* ***************************************************** */
#include <REGX51.H>
#include "lcd.h"

int i=0,j=0,k=0;

static void xint0_isr(void) interrupt IE0_VECTOR
{
  //delay100us(20);

  i++;
  clear_LCD();
  display_LCD_string("the count is:");
  gotoxy(2,1);
  display_LCD_number(k);
  display_LCD_number(j);
  display_LCD_number(i);
     if(i==99)
       {i=0;
  j++;
      if(j==99)
    {j=0;
    k++;
    if(k==99)k=0 ;
    }
  }
}   

void main (void) 
{
      
  init_LCD();
  clear_LCD();

  EA=0;
  IT0=1;
  EX0=1;
  PX0=1;
  EA=1;
while(1);    //等待中断
  
 
}

//LCD的子程序

#include <REGX51.H>
#include <lcd.h>

char code int2charLCD[]="0123456789";
 
void write_LCD_command(unsigned command)
{
 rw=WRITE;
 rs=COMMAND;
 enable=ENABLE;
 P1=command;
 delay100us(20);
 enable=DISABLE;
 rw=1;
}
void write_LCD_data(unsigned LCDdata)
{
 rw=WRITE;
 rs=DATA;
 enable=ENABLE;
 P1=LCDdata;
 delay100us(20);
 enable=DISABLE;
 rw=1;
}
void init_LCD(void)
{
 write_LCD_command(TwoLine_8bit);// 0x38   
 write_LCD_command(CURSOR_OFF); // 0x0C
 write_LCD_command(CURSOR_RIGHT);// 0x06
}
void clear_LCD()
{
 write_LCD_command(CLEAR); 
 write_LCD_command(CURSOR_HOME); 
}
void display_LCD_string(char *p)
{
 while(*p)
 {
  write_LCD_data(*p);
  p++;
 }
}
void display_LCD_number(int number)
{
 unsigned int x,y;
 x=number/10;
 y=number-10*x;
 write_LCD_data(int2charLCD[x]);
 write_LCD_data(int2charLCD[y]);
}
void gotoxy(unsigned x,unsigned y)
{
 if(x==1) 
  write_LCD_command(GOTO_LINE_1+y);
 else
     write_LCD_command(GOTO_LINE_2+y);
}

/* LCD command */  //LCD的头文件
#define  TwoLine_8bit 56  // 0x38
#define  CLEAR    1  // 0b00000001
#define  CURSOR_HOME  2  // 0b00000010
#define  CURSOR_LEFT  4  // 0b00000100
#define  CURSOR_RIGHT 6  // 0b00000110
#define  CURSOR_OFF  12  // 0b00001100
#define  CURSOR_ON  14  // 0b00001110
#define  CURSOR_BLINK 15  // 0b00001111
#define  GOTO_LINE_2  192
#define  GOTO_LINE_1  128

/* LCD control lines */
#define  ENABLE   1
#define  DISABLE  0
#define  READ  1
#define  WRITE  0
#define  COMMAND  0
#define  DATA  1
#define  rs   P3_5
#define  rw   P3_4
#define  enable  P3_3

void delay100us(unsigned);
void write_LCD_command(unsigned);
void write_LCD_data(unsigned);
void init_LCD(void);
void clear_LCD(void);
void display_LCD_string(char *);
void gotoxy(unsigned,unsigned);
void display_LCD_number(char);

void delay100us(unsigned char n) //延时子程序
{
#pragma asm
more: mov  R3,#48
  djnz R3,$
  djnz R7,more
#pragma endasm
}

2007-5-28 18:23:34IP: 保密
amo
等级:风云使者
权限:管理员
积分:2833
金钱:0
声望:0
经验:2414
发帖数:1020
注册时间:2005年11月11日
编辑 删除 引用 第2楼
不错不错^_^
不过注释还可以更详细一点,LCD型号、控制器芯片型号最好也加上;程序开头一般还要加上自己对程序的版权声明,以及对程序功能、操作方法做一番描述……
执子之手  与子偕老
2007-5-28 18:49:52IP:保密
hodys
等级:骑士
权限:版主
积分:1332
金钱:0
声望:0
经验:1164
发帖数:211
注册时间:2006年7月8日
编辑 删除 引用 第3楼

为什么不能上传附件啊?

2007-5-31 8:40:44IP:保密
haihuang2008
等级:社区游民
权限:普通用户
积分:12
金钱:0
声望:0
经验:0
发帖数:2
注册时间:2008年7月5日
编辑 删除 引用 第4楼

这么复杂,我看不明白!!!!

2008-7-5 11:06:06IP:保密
 快速回复
  • 支持UBB,HTML标签

  • 高级回复
  • 内容

    操作选项: 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖

    Copyright © 2004-2008  中国器件网 电话:025-8481 0381 站长:137 7054 7485.com Powered By: HighWay & amo
    不良信息举报中心 苏ICP备05063888号