51單片機程序做一個速度加里程的表,里程用1602速度用7段數碼管顯示,程序大至有形了,其中還有錯誤請幫忙發上外部中斷和定時器部分程序,顯示部分就不發了.
void extern_int0() interrupt 0
{
cnt1++; //外部0中斷接收脈沖數
}
void time0(void) interrupt 1
{
TH0=0xf2; //8M晶振 5ms
TL0=0xfa;
cnt++;
if(cnt==20) //100毫秒中斷
{
cnt=0;
// TR0=0;
// EX1=0;
zhs=cnt2*600/144; //每分鐘轉速
ZHS2=zhs*60/1000; //ZHS2顯示每小時公里數
// EX1=1;
cnt2=0;
// TR0=1;
}
void extern_int1() interrupt 2
{
cnt2++; //外部中斷1接收的脈沖數
}
void main()
{
init();
while(1)
{
if(cnt1==50) //50個脈沖為1米
{
cnt1=0;
jishu2++; //這里液晶顯示的數據,這里顯示的單位是米
write_sfm2(11,jishu2);
}
display();
}
}
用proteus仿真,外部中斷0和1同時輸入500HZ脈沖,程序顯示是對的.里程從0米開始加起
當脈沖高于500以上,速度顯示也是對的,就是里程不對沒顯示了或顯示幾十就卡住了.
51C語言自學的,有什么寫的不對或邏輯上的錯誤請指正.
最好是用一個外部中斷累加計數,并計算出速度和里程,里程是從0開始加起來
請朋友幫個忙這程序怎么改或者這樣的程序要怎么樣寫,最好幫我寫一段計算部分的.謝謝了
|