欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
源程序代碼
[打印本頁]
作者:
1502430361
時間:
2021-6-15 23:06
標題:
源程序代碼
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define NOP() {_nop_();_nop_();_nop_();_nop_();}
//------LCD引腳-----
sbit lcd_rs=P0^6;
sbit lcd_en=P0^7;
//------超聲波引腳-------
sbit Tx=P3^3; //觸發控制信號輸入
sbit Rx=P3^2; //回響信號輸出
uchar xuehao[]={" 17110201138 "};
uchar xingming[]={"NAME:zhaolongda"};
uchar code table[]={" Distance Test:"}; //LCD第一行顯示
uchar temp_dis[]= {" 000.0 cm"}; //LCD第二行
long int t,distance;
uchar cache[4]={0,0,0,0};
//--------延時-------
void delay(uint ms)
{
uint t;
while(ms--)
for(t=0;t<30;t++);
}
void write_com(uchar com);//init_lcd()函數需要用到,所以先提前聲明
//************LCD1602初始化函數************************
void init_lcd()
{
write_com(0x38); //設置16*2顯示,5*7點陣,8位數據接口
write_com(0x08); //寫一個字符后地址指針加1
write_com(0x01); //顯示清零,數據指針清零
write_com(0x06); //寫一個字符后地址指針加1
write_com(0x0c); //關顯示,光標不顯示不閃爍
}
//************LCD1602寫指令函數************************
void write_com(uchar com) //lcd1602寫指令:rs低電平,rw低電平,en從高電平變為低電平
{
delay(5);
lcd_rs = 0; // 選擇寫指令
lcd_en = 0; // 將使能端置0
P2 = com; // 將要寫的命令送到數據總線上
delay(5); // 延時5ms,待數據穩定
lcd_en = 1; // 由于初始化已將lcd_en置為0,使能端給一個高脈沖,
delay(5); // 延時5ms,待數據穩定
lcd_en = 0; // 將使能端置0以完成脈沖
}
//************LCD1602寫數據函數************************
void write_data(uchar date)//lcd1602寫數據:rs高電平,rw低電平,en從高電平變低電平
{
delay(5);
lcd_rs = 1; // 選擇寫數據
lcd_en = 0; // 將使能端置0
P2 = date; // 將要寫的數據送到數據總線上
delay(5); // 延時5ms,待數據穩定
lcd_en = 1; // 由于初始化已將lcd_en置為0,使能端給一個高脈沖,
delay(5); // 延時5ms,待數據穩定
lcd_en = 0; // 將使能端置0以完成脈沖
}
//************LCD1602顯示函數******************
void lcd1602_display(uchar *q,uchar *p)//*通過指針p和q分別指向兩個數組的第一個數,然后進行數組掃描顯示,一次性顯示兩行字符
{
write_com(0x80); // 現將數據指針定位到第一行第一個字處
while(*q!='\0')
{
write_data(*q);
q++;
delay(1);
}
write_com(0xc0); // 現將數據指針定位到第二行第一個字處
while(*p!='\0')
{
write_data(*p);
p++;
delay(1);
}
}
//************LCD1602顯示歡迎函數******************
void welcome() //掃描顯示學號加姓名,幾秒延時后結束
{
init_lcd();
lcd1602_display(xuehao,xingming);
delay(200);
}
void HC05_Init() //超聲波模塊初始化函數
{
Tx=1; //觸發脈沖
NOP();NOP();NOP();NOP();
Tx=0;
distance=0.1725*t; //距離計算
}
void distance_convert(long int dat) //距離計算函數
{
cache[0]=dat/1000;
cache[1]=dat/100%10;
cache[2]=dat/10%10;
cache[3]=dat%10;
temp_dis[4]=cache[0]+'0';
temp_dis[5]=cache[1]+'0';
temp_dis[6]=cache[2]+'0';
temp_dis[8]=cache[3]+'0';
}
//------------主程序-----------
void main()
{
welcome();
init_lcd();
delay(5);
TMOD=0x09; //定時器T0工作方式1 GATE0=1
EA=1; //開總中斷
TR0=1; //啟動定時器
EX0=1; //開外部中斷
IT0=1; //設置為下降沿中斷方式
while(1)
{
HC05_Init();
distance_convert(distance);
lcd1602_display(table,temp_dis);
}
}
//外部中斷0
void int0() interrupt 0
{
t=(TH0*256+TL0); //計算高電平持續的時間,上升沿到來時候開始計時,下降沿到來進入外部中斷,關閉計時器,停止計時
TH0=0;
TL0=0;
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1