单片机设计 按键顺序控制加减计数(1602 液晶显示) 程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD_IO P2

sbit KK1 = P3^2; //按键输入;

sbit KK2 = P3^3; //按键输入;

sbit LCD_RS = P3^5;

sbit LCD_RW = P3^6;

sbit LCD_EN = P3^7;

uchar code LCD_line1[] = " The Counter";

int idata mydata=0;

/************************************************************** * 名称: Delay_1ms()

* 功能: 延时子程序,延时时间为1ms * x

* 输入: x (延时一毫秒的个数)

* 输出: 无

***************************************************************/ void Delay_1ms(uint x)

{

uchar i, j;

for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);

}

/************************************************************** * 名称: lcd_bz( )

* 功能: 测试忙碌子程序

* 输入: 无

* 输出: result

***************************************************************/ bit lcd_bz()

{

bit result;

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P3&0x80);

LCD_EN = 0;

return result;

}

/**************************************************************

* 名称: W_LCD_Com( )

* 功能: 写指令子程序

* 输入: com

* 输出: 无

***************************************************************/

void W_LCD_Com(uchar com)

{

while(lcd_bz());

LCD_RS = 0; LCD_RW=0; LCD_EN = 0; // LCD_RS和R/W同时为低电平时,可以写入指令

LCD_IO = com; Delay_1ms(5); //下面用EN输入一个高脉冲

LCD_EN = 1; Delay_1ms(5); LCD_EN = 0;

}

/**************************************************************

* 名称: W_LCD_Dat( )

* 功能: 写数据子程序

* 输入: dat

* 输出: 无

***************************************************************/

void W_LCD_Dat(uchar dat)

{

while(lcd_bz());

LCD_RS = 1; LCD_RW=0;LCD_EN = 0; // LCD_RS为高,LCD_RW为低时,可以写入数据LCD_IO = dat; Delay_1ms(5); //下面用EN输入一个高脉冲

LCD_EN = 1; Delay_1ms(5); LCD_EN = 0;

}

/**************************************************************

* 名称: W_LCD_STR( )

* 功能: 写字符串子程序

* 输入: *s

* 输出: 无

***************************************************************/

void W_LCD_STR(uchar *s)

{

while(*s > 0) {W_LCD_Dat(*s); s++;}

}

/**************************************************************

* 名称: LCD_cursor( )

* 功能: 设置光标位置子程序

* 输入: pos

* 输出: 无

***************************************************************/

void LCD_cursor(uchar pos) //LCD光标定位到处{

W_LCD_Com(pos+0x80); //第一行地址是0x80

}

/**************************************************************

* 名称: initial( )

* 功能: 初始化子程序

* 输入: 无

* 输出: 无

* 指令:#define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一#define LCD_DISPLAY_ON 0x0C //显示开

#define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示

***************************************************************/

void initial()

{

W_LCD_Com(0x06|0x04);

W_LCD_Com(0x0c|0x08);

W_LCD_Com(0x38);

W_LCD_STR(LCD_line1);

}

/**************************************************************

* 名称: Main()

* 功能: 主函数

***************************************************************/

void main()

{

bit flag;

uchar temp;

uchar pos;

Delay_1ms(10) ;

initial();

while(1){

pos=0x4f;

if(mydata>255)

mydata=0;

else if(mydata<0)

mydata=255;

if(mydata>127) //把mydata当做-128~127的有符号数来显示

{

相关文档
最新文档