欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
用單片機(jī)+lm331來(lái)設(shè)計(jì)數(shù)字電壓表,為什么proteus中LCD顯示一直不停的兩個(gè)值直接跳動(dòng)?
[打印本頁(yè)]
作者:
1250261847
時(shí)間:
2022-3-27 11:58
標(biāo)題:
用單片機(jī)+lm331來(lái)設(shè)計(jì)數(shù)字電壓表,為什么proteus中LCD顯示一直不停的兩個(gè)值直接跳動(dòng)?
一直這樣跳動(dòng),穩(wěn)定不了一個(gè)值。為什么啊發(fā)了程序和仿真
51hei.png
(30.41 KB, 下載次數(shù): 31)
下載附件
2022-3-27 18:08 上傳
單片機(jī)源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P2^0; //液晶控制引腳
sbit lcden=P2^1;
unsigned long v = 0;
unsigned int T0count; //計(jì)數(shù)器計(jì)滿次數(shù),計(jì)滿一次對(duì)應(yīng)的脈沖數(shù)為65536個(gè)
unsigned int timecount; //定時(shí)器定時(shí)1秒的變量,每次對(duì)應(yīng)為50ms,計(jì)20次對(duì)應(yīng)就是1秒,然后計(jì)算一秒內(nèi)的計(jì)數(shù)器脈沖個(gè)數(shù)
bit flag; //計(jì)時(shí)到1秒時(shí)該標(biāo)志位置1,進(jìn)行脈沖數(shù)的運(yùn)算,得出結(jié)果送顯示,然后該位清零,重新開(kāi)始脈沖計(jì)數(shù)
unsigned long x; //計(jì)算脈沖的數(shù)據(jù)范圍一般比較大,所以用無(wú)符號(hào)長(zhǎng)整形變量定義該變量
uchar code table1[]="FREQ TO VOL TEST"; //初始化顯示字符
uchar code table2[]=" v "; //初始化顯示字符
void delay(uint xms) //延時(shí)函數(shù)
{
int a,b;
for(a=xms;a>0;a--)
for(b=110;b>0;b--);
}
void write_com(uchar com) //寫(xiě)命令函數(shù)
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void write_date(uchar date) //寫(xiě)數(shù)據(jù)函數(shù)
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void init_lcd() //初始化函數(shù)
{
uchar i;
lcden=0; //默認(rèn)開(kāi)始狀態(tài)為關(guān)使能端,見(jiàn)時(shí)序圖
write_com(0x0f);
write_com(0x38); //顯示模式設(shè)置,默認(rèn)為0x38,不用變。
write_com(0x01); //顯示清屏,將上次的內(nèi)容清除,默認(rèn)為0x01.
write_com(0x0c); //顯示功能設(shè)置0x0f為開(kāi)顯示,顯示光標(biāo),光標(biāo)閃爍;0x0c為開(kāi)顯示,不顯光標(biāo),光標(biāo)不閃
write_com(0x06); //設(shè)置光標(biāo)狀態(tài)默認(rèn)0x06,為讀一個(gè)字符光標(biāo)加1.
write_com(0x80); //設(shè)置初始化數(shù)據(jù)指針,是在讀指令的操作里進(jìn)行的
for(i=0;i<16;i++) //顯示初始化
{
write_date(table1[i]); //顯示第一行字符
}
write_com(0x80+0x40); //選擇第二行
for(i=0;i<16;i++)
{
write_date(table2[i]); //顯示第二行字符
}
}
void f_to_vol()
{
unsigned long Rt,RL,Rs;
float Ct;
Ct=4.7;
Rt=10;
RL=360;
Rs=36;
v=(2.09*Ct*Rt*RL*x)/Rs;
}
void display() //顯示函數(shù)
{
write_com(0x80+0x40+8);
write_date(v/1000%10+0x30);
write_date('.');
write_date(v/100%10+0x30);
write_date((v/10%10)+0x30);
write_date((v%10)+0x30);
}
void main(void) //主函數(shù)
{
TMOD=0x15; //定義T1為定時(shí)模式,T0位計(jì)數(shù)模式
TH0=0;
TL0=0; //計(jì)數(shù)器清零
TH1=0x3c;
TL1=0xb0; //定時(shí)器賦值(定時(shí)50ms)
TR1=1; //打開(kāi)定時(shí)器T1
TR0=1; //打開(kāi)計(jì)數(shù)器T0
ET0=1; //打開(kāi)中斷允許
ET1=1; //打開(kāi)中斷允許
EA=1; //打開(kāi)中斷總開(kāi)關(guān)
init_lcd();
while(1) //進(jìn)入循環(huán),因?yàn)槔ㄌ?hào)內(nèi)為常數(shù)1,不會(huì)變化,所以該表達(dá)式一直成立,又稱(chēng)死循環(huán)
{
f_to_vol();
display(); //調(diào)用顯示函數(shù)
if(flag) //判斷1秒時(shí)間是否到
{
flag=0; //標(biāo)志位清零,計(jì)算完脈沖數(shù)后重新開(kāi)始計(jì)時(shí)計(jì)數(shù)
x=T0count*65536+TH0*256+TL0; //讀取1秒時(shí)間內(nèi)的計(jì)數(shù)個(gè)數(shù)(T0count為每次計(jì)數(shù)超過(guò)65536時(shí)進(jìn)入計(jì)數(shù)中斷加1)
T0count=0; //計(jì)數(shù)器中斷次數(shù)清零
TH0=0;
TL0=0; //計(jì)數(shù)器清零
TR0=1;
TR1=1; //重新打開(kāi)定時(shí)計(jì)數(shù)器
}
}
}
void t0() interrupt 1 //計(jì)數(shù)器中斷函數(shù)
{
T0count++; //計(jì)數(shù)超過(guò)65536,就產(chǎn)生一次中斷
}
void t1() interrupt 3 //定時(shí)器中斷函數(shù)
{
TH1=0x3c;
TL1=0xb0; //50ms進(jìn)入一次中斷,進(jìn)入中斷后要重新賦初值
timecount++; //每進(jìn)一次中斷就是50ms,該變量加一
if(timecount==20) //該變量加到20次時(shí),代表1秒到了
{
TR0=0; //關(guān)閉計(jì)數(shù)器
TR1=0; //關(guān)閉定時(shí)器
timecount=0; //計(jì)時(shí)變量清零,準(zhǔn)備下次定時(shí)
flag=1; //一秒時(shí)間到,該標(biāo)志位置1,主函數(shù)中執(zhí)行脈沖數(shù)運(yùn)算與顯示函數(shù)
}
}
復(fù)制代碼
所有資料51hei附件下載:
仿真程序.7z
(103.65 KB, 下載次數(shù): 14)
2022-3-27 18:10 上傳
點(diǎn)擊文件名下載附件
作者:
人工置頂員
時(shí)間:
2022-3-27 18:10
頂一下
作者:
Hephaestus
時(shí)間:
2022-3-27 18:49
仿真不要太當(dāng)真,能工作就行了。到底跳不跳只能用實(shí)物。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1