标题:
单片机+1602液晶显示字符串中的某一个字符闪烁程序
[打印本页]
作者:
用户21111412
时间:
2020-9-25 13:29
标题:
单片机+1602液晶显示字符串中的某一个字符闪烁程序
1602液晶显示0~9,按键可切换,不闪烁与其中一位闪烁(暂时没想到什么简便的方法,只能采用最原始的方法了)。
51hei截图20200925132739.jpg
(83.27 KB, 下载次数: 53)
下载附件
2020-9-25 13:28 上传
#include "reg51.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
sbit KEY0=P2^4;
uchar code table[]="0123456789";
uchar m=0;
/*******************************************************
延时函
*******************************************************/
void delayus(uint z)
{
while(z--);
}
/*******************************************************
延时函数,12MHz晶振下,在z为1时,延时约17us
*******************************************************/
bit Busy()
{
bit bsy;
RS=0;
RW=1;
EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
bsy=(bit)(P0&0x80);
EN=0;
return (bsy);
}
/*******************************************************
写指令函数
*******************************************************/
void Write_Command(uchar com)
{
while(Busy());
RS=0;
RW=0;
P0=com;
delayus(1);
EN=1;
EN=0;
}
/*******************************************************
写数据函数
*******************************************************/
void Write_Data(uchar dat)
{
while(Busy());
RS=1;
RW=0;
P0=dat;
delayus(1);
EN=1;
EN=0;
}
/*******************************************************
液晶初始化函数
*******************************************************/
void LCD_Init()
{
Write_Command(0x38);
Write_Command(0x0C);
Write_Command(0x06);
Write_Command(0x01);
}
void Key()
{
uint temp0;
static uchar pass0=0;
if(KEY0==0)
temp0++;
if(temp0>20&&pass0==0)
{
pass0=1;
if(m<10)
m++;
else
m=0;
}
if(KEY0==1)
{
temp0=0;
pass0=0;
}
}
void display()
{
switch(m)
{
case 0:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 1:
Write_Command(0x80);
Write_Data(table[0]);
delayus(500);
Write_Command(0x80);
Write_Data(0x20);
delayus(500);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 2:
Write_Command(0x80);
Write_Data(table[0]);
Write_Command(0x80+1);
Write_Data(table[1]);
delayus(200);
Write_Command(0x80+1);
Write_Data(0x20);
delayus(200);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 3:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Command(0x80+2);
Write_Data(table[2]);
delayus(200);
Write_Command(0x80+2);
Write_Data(0x20);
delayus(200);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 4:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Command(0x80+3);
Write_Data(table[3]);
delayus(200);
Write_Command(0x80+3);
Write_Data(0x20);
delayus(200);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 5:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Command(0x80+4);
Write_Data(table[4]);
delayus(200);
Write_Command(0x80+4);
Write_Data(0x20);
delayus(200);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 6:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Command(0x80+5);
Write_Data(table[5]);
delayus(200);
Write_Command(0x80+5);
Write_Data(0x20);
delayus(200);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 7:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Command(0x80+6);
Write_Data(table[6]);
delayus(200);
Write_Command(0x80+6);
Write_Data(0x20);
delayus(200);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 8:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Command(0x80+7);
Write_Data(table[7]);
delayus(200);
Write_Command(0x80+7);
Write_Data(0x20);
delayus(200);
Write_Data(table[8]);
Write_Data(table[9]);
break;
case 9:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Command(0x80+8);
Write_Data(table[8]);
delayus(200);
Write_Command(0x80+8);
Write_Data(0x20);
delayus(200);
Write_Data(table[9]);
break;
case 10:
Write_Command(0x80);
Write_Data(table[0]);
Write_Data(table[1]);
Write_Data(table[2]);
Write_Data(table[3]);
Write_Data(table[4]);
Write_Data(table[5]);
Write_Data(table[6]);
Write_Data(table[7]);
Write_Data(table[8]);
Write_Command(0x80+9);
Write_Data(table[9]);
delayus(200);
Write_Command(0x80+9);
Write_Data(0x20);
delayus(200);
break;
}
}
main()
{
LCD_Init();
while(1)
{
Key();
display();
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1