欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)按鍵LCD1602顯示程序
[打印本頁(yè)]
作者:
1-1..
時(shí)間:
2021-6-25 17:13
標(biāo)題:
單片機(jī)按鍵LCD1602顯示程序
3KZD{3PRI]DS[{@KM`4~JJ3.png
(141.44 KB, 下載次數(shù): 60)
下載附件
原理圖
2021-6-25 17:12 上傳
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit RS = P2^0; //Pin4
sbit RW = P2^1; //Pin5
sbit E= P2^2; //Pin6
#define Data P0//數(shù)據(jù)端口
char TimeNum[16];
char Test1[16];
void DelayUs(unsigned char us)//微秒級(jí)延時(shí)函數(shù)
{
unsigned char uscnt;
uscnt=us>>1;
while(--uscnt);
}
void DelayMs(unsigned char ms) //毫秒級(jí)延時(shí)函數(shù)
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void WriteCommand(unsigned char c)//寫命令函數(shù)
{
DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
void WriteData(unsigned char c) //寫數(shù)據(jù)函數(shù)
{
DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)//寫字符函數(shù)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行則命令代碼高4位為0xc
else
p=pos+0x80; //是第二行則命令代碼高4位為0x8
WriteCommand (p);//寫命令
WriteData (c);//寫數(shù)據(jù)
}
void lcd_sfm(unsigned char add,unsigned char date)//顯示位置和數(shù)據(jù)
{
unsigned char shi,ge;
shi=date/10;
ge=date%10;
WriteCommand(0x80+0x40+add);
WriteData(0x30+shi);
WriteData(0x30+ge);
}
void ShowString (unsigned char line,char *ptr)//寫字符串函數(shù)
{
unsigned char l,i;
l=line<<4;//若line=0,則地址的高四位為0;若line=1.則地址的高四位為1
for (i=0;i<16;i++)
ShowChar (l++,*(ptr+i));//循環(huán)顯示16個(gè)字符
}
void InitLcd()//初始化函數(shù)
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //顯示光標(biāo)移動(dòng)位置
WriteCommand(0x0c); //顯示開及光標(biāo)設(shè)置
WriteCommand(0x01); //顯示清屏
}
void delay(unsigned int t)
{while(t--);
}
unsigned char keyscan(void) //矩陣鍵盤掃描函數(shù)
{
unsigned char h,l; //定義行、列值中間變量
P1=0x0f; //列線輸出全為0,行為1
h=P1&0x0f; //讀入行線
if(h!=0x0f) //檢測(cè)有無按鍵按下,行不全為1
{ delay(100); //延時(shí)去抖
if(h!=0x0f) //如果確實(shí)按下
{
h=P1&0x0f; //再次讀入行線
P1=0xf0; //輸出當(dāng)前列線值,行線反轉(zhuǎn)
l=P1&0xf0; //讀入列線值
return (h+l); //鍵盤最后組合編碼值,也就是鍵值
}
}
return 0xff; //其余情況返回該值
}
unsigned char getkey( )
{
unsigned char key,key_num;
key=keyscan(); //用key讀取keyscan()的值
switch(key)
{ case 0xee: key_num=0; break;
case 0xed: key_num=1; break;
case 0xeb: key_num=2; break;
case 0xe7: key_num=3; break;
case 0xde: key_num=4; break;
case 0xdd: key_num=5; break;
case 0xbd: key_num=6; break;
case 0x7d: key_num=7; break;
case 0xbe: key_num=8; break;
case 0xdb: key_num=9; break;
case 0xbb: key_num=10; break;
case 0x7b: key_num=11; break;
case 0x7e: key_num=12; break;
case 0xd7: key_num=13; break;
case 0xb7: key_num=14; break;
case 0x77: key_num=15; break;
default:key_num=0xff; break;
}
return key_num;
}
void main(void)//主函數(shù)
{ unsigned char kk;
float x=99.0;
InitLcd();//初始化LCD
DelayMs(15);//延時(shí)保證信號(hào)穩(wěn)定
lcd_sfm(5,43);
ShowString(0,"LCD");
while(1)
{ kk=getkey();
if(kk!=0xff)
{ lcd_sfm(5,kk);
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1