欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機LCD1602液晶的轉速表程序設計
[打印本頁]
作者:
wanjung
時間:
2025-10-25 14:11
標題:
基于51單片機LCD1602液晶的轉速表程序設計
單片機又稱單片微控制器(MCU),它把一個計算機系統集成到一個芯片上。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。 本文便是運用AT89C51單片機控制的轉速表設計。電機在運行過程中,需要對其進行監控,轉速是一個必不可少的參數。數字式轉速表就是對電機轉速進行測量,并可以和PC機進行通信,顯示電機的轉速,并觀察電機運行的基本情況。本設計主要是運用了AT89C51作為控制核心,由霍爾傳感器,LED數碼顯示管,施密特觸發器等構成。充分發揮單片機的性能。 本設計優點是電路較簡單、功能完善、測量速度快、精度高、控制系統可靠,性價比較高等特點。
電路原理圖如下:
1602DLT.jpg
(172.81 KB, 下載次數: 0)
下載附件
電路圖
2025-10-25 14:15 上傳
單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit COUNT_IN=P3^2;
// 定義1602 相關管腳
sbit rs=P2^7;
sbit en=P2^6;
// 按鍵定義
sbit add=P3^3;
sbit dec=P3^4;
sbit BUZZ=P1^0;
uint count,m,n;
unsigned long RPM;
long shangxian=10000;
bit flag;
uchar code tab1[]={" VH: r/min "}; // 一行顯示的固定字符
uchar code tab2[]={" RV: r/min "}; // 轉速顯示的固定字符
void delay(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void init()
{
IT0=1; //INT0 負跳變觸發
TMOD=0x01;// 定時器工作于方式1
TH0=0xfc; //1ms
TL0=0x18;
EA=1; //CPU 開中斷總允許
ET0=1;// 開定時中斷
EX0=1;// 開外部INTO中斷
TR0=1;// 啟動定時
}
/******** 液晶寫入指令函數與寫入數據函數, 以后可調用
**************/
void write_1602com(uchar com)//**** 液晶寫入指令函數****
{
rs=0;// 數據/ 指令選擇置為指令
P0=com;// 送入數據
delay(1);
en=1;// 拉高使能端,為制造有效的下降沿做準備
delay(1);
en=0;//en 由高變低,產生下降沿,液晶執行命令
}
void write_1602dat(uchar dat)//*** 液晶寫入數據函數****
{
rs=1;// 數據/ 指令選擇置為數據
P0=dat;// 送入數據
delay(1);
en=1; //en 置高電平,為制造下降沿做準備
delay(1);
en=0; //en 由高變低,產生下降沿,液晶執行命令
}
void lcd_init()//*** 液晶初始化函數****
{
uchar a;
write_1602com(0x38);// 設置液晶工作模式,意思: 16*2 行顯示,5*7 點陣, 8 位數據
write_1602com(0x0c);// 開顯示不顯示光標
write_1602com(0x06);// 整屏不移動,光標自動右移
write_1602com(0x01);// 清顯示
write_1602com(0x80);// 顯示固定符號從第一行第1 個位置之后開始顯示
for(a=0;a<16;a++)
{
write_1602dat(tab1[a]);// 向液晶屏寫固定符號部分
}
write_1602com(0x80+0x40);// 顯示固定符號寫入位置,從第2 個位置后開始顯示
for(a=0;a<16;a++)
{
write_1602dat(tab2[a]);// 寫顯示固定符號
}
}
void display()
{
uchar gw,sw,bw,qw,ww;
if(RPM<=99999) // 范圍內時
{
ww=RPM/10000;
qw=RPM%10000/1000;
bw=RPM%1000/100;//取得百位
sw=RPM%100/10;//取得十位數字
gw=RPM%10;// 取得個位數字
write_1602com(0x80+0x40+5);
if(ww==0)
write_1602dat(' ');
else
write_1602dat(0x30+ww);
if((ww+qw)==0)
write_1602dat(' ');
else
write_1602dat(0x30+qw);
if((ww+qw+bw)==0)
write_1602dat(' ');
else
write_1602dat(0x30+bw);
if((ww+qw+bw+sw)==0)
write_1602dat(' ');
else
write_1602dat(0x30+sw);
write_1602dat(0x30+gw);// 數字+30 得到該數字的LCD1602顯示碼
}
else // 超過范圍時顯示-----
{
write_1602com(0x80+0x40+2);
write_1602dat('-');
write_1602dat('-');
write_1602dat('-');
write_1602dat('-');
write_1602dat('-');
}
}
void display_shangxian()
{
write_1602com(0x80+5);
if(shangxian/10000==0)
write_1602dat(' ');
else
write_1602dat(0x30+shangxian/10000);
if((shangxian/1000)==0)
write_1602dat(' ');
else
write_1602dat(0x30+shangxian%10000/1000);
if((shangxian/100)==0)
write_1602dat(' ');
else
write_1602dat(0x30+shangxian%10000%1000/100);
if((shangxian/10)==0)
write_1602dat(' ');
else
write_1602dat(0x30+shangxian%10000%1000%100%10);// 數字+30得到該數字的LCD1602顯示碼
}
void key()
{
uint key_press_num;
uchar p;
if(add==0)
{
delay(20);
if(add==0)
{
while(!add)
{
key_press_num++;
if(key_press_num>=20)
{
key_press_num=0;
while(!add)
{
shangxian=shangxian+10;
if(shangxian>20000)
shangxian=0;
// for(p=0;p<20;p++)
display_shangxian();
}
}
display();
delay(10);
}
if(key_press_num!=0)
{
key_press_num=0;
shangxian++;
if(shangxia
{
key_press_num=0;
while(!dec)
{
shangxian=shangxian-10;
if(shangxian<0)
shangxian=20000;
// for(p=0;p<20;p++)
display_shangxian();
}
}
display();
delay(10);
}
if(key_press_num!=0)
{
key_press_num=0;
shangxian--;
if(shangxian<0)
shangxian=20000;
}
}
}
}
void alarm()
{
if(RPM>=shangxian)
BUZZ=0;
else
BUZZ=1;
}
void main()
{
init();
lcd_init();
while(1)
{
display();
display_shangxian();
key();
alarm();
}
}
void EXINT0() interrupt 0
{
count++;
flag=1;
n=0;
if(count>=10)
下載附件編輯查看
復制代碼
Keil源程序下載:
固件.7z
(22.5 KB, 下載次數: 0)
2025-10-25 14:49 上傳
點擊文件名下載附件
源程序
下載積分: 黑幣 -5
作者:
dahai1029167960
時間:
2025-10-28 16:36
很好的學習資料,受益匪淺
作者:
fengyun6198
時間:
2025-11-1 08:35
能編寫出這么一段程序,樓主還是下了功夫的:但是程序的編寫格式:如果能按規范點來編寫,就更完美……
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1