亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機按鍵LCD1602顯示程序
[打印本頁]
作者:
1-1..
時間:
2021-6-25 17:13
標題:
單片機按鍵LCD1602顯示程序
3KZD{3PRI]DS[{@KM`4~JJ3.png
(141.44 KB, 下載次數: 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//數據端口
char TimeNum[16];
char Test1[16];
void DelayUs(unsigned char us)//微秒級延時函數
{
unsigned char uscnt;
uscnt=us>>1;
while(--uscnt);
}
void DelayMs(unsigned char ms) //毫秒級延時函數
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void WriteCommand(unsigned char c)//寫命令函數
{
DelayMs(5);//操作前短暫延時,保證信號穩定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
void WriteData(unsigned char c) //寫數據函數
{
DelayMs(5);//操作前短暫延時,保證信號穩定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)//寫字符函數
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行則命令代碼高4位為0xc
else
p=pos+0x80; //是第二行則命令代碼高4位為0x8
WriteCommand (p);//寫命令
WriteData (c);//寫數據
}
void lcd_sfm(unsigned char add,unsigned char date)//顯示位置和數據
{
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)//寫字符串函數
{
unsigned char l,i;
l=line<<4;//若line=0,則地址的高四位為0;若line=1.則地址的高四位為1
for (i=0;i<16;i++)
ShowChar (l++,*(ptr+i));//循環顯示16個字符
}
void InitLcd()//初始化函數
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //顯示光標移動位置
WriteCommand(0x0c); //顯示開及光標設置
WriteCommand(0x01); //顯示清屏
}
void delay(unsigned int t)
{while(t--);
}
unsigned char keyscan(void) //矩陣鍵盤掃描函數
{
unsigned char h,l; //定義行、列值中間變量
P1=0x0f; //列線輸出全為0,行為1
h=P1&0x0f; //讀入行線
if(h!=0x0f) //檢測有無按鍵按下,行不全為1
{ delay(100); //延時去抖
if(h!=0x0f) //如果確實按下
{
h=P1&0x0f; //再次讀入行線
P1=0xf0; //輸出當前列線值,行線反轉
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)//主函數
{ unsigned char kk;
float x=99.0;
InitLcd();//初始化LCD
DelayMs(15);//延時保證信號穩定
lcd_sfm(5,43);
ShowString(0,"LCD");
while(1)
{ kk=getkey();
if(kk!=0xff)
{ lcd_sfm(5,kk);
}
}
}
復制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1