|
/* 标题: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 }
|