单片机设计 按键顺序控制加减计数(1602 液晶显示) 程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的有符号数来显示
{