㈠ 求一個單片機計數器程序,
#include<reg51.h>
#defineucharunsignedchar
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbitkey=P3^7;
main()
{
uchari,key;
while(1)
{
if(key==0)
{
while(key==0);
i++;
i%=10;
P0=table(i);
}
}
}
㈡ 51單片機計數器編程
利用紅外對管作感應器的話,只要將單片機設置為計數模式就行,然後紅外接收管接到單片機的P3^4或者P3^5口,這是51系列單片機計數功能口,然後設置好TMOD寄存器和TCON寄存器選擇工作方式和觸發方式即可,計數變數定義為全局變數,然後傳遞給顯示函數。 如有不懂的地方隨時回復我。 希望我的回答能幫助到你。
㈢ 單片機計數器程序
說實話,用了C以後,對於超過20行的匯編,實在是不想看了....
而且,兄弟一句注釋都沒有,這不是好習慣
㈣ 51單片機計數程序怎麼寫
CLR P0.1 ;初態,P0.1=低
MOV 30H,#00H ;計數器=0
START: JB P0.0,$ ;等待P0.0變低
SETB P0.1 ;變高
INC 30H ;計數器加一
ACALL DISP ;調用顯示程序,顯示30H單元數字
JB P0.2,$ ;等P0.2變低電平
CLR P0.1
DEC 30H
ACALL DISP
AJMP START
這個程序可以完成你的要求,
但是,但是,但是,根據你的敘述,計數器只會在0-1之間變化。
因為你要求:
「。。。將p0-1口至高電瓶,一直持續到p0-2口低電瓶一次。。。」
㈤ 51單片機 按鍵按下去 計數一次 程序應該怎麼寫
在按鍵按下後,用循環語句,等待抬起計數
if(按鍵按下)
{
延時;
if(按鍵按下)
{
while(按鍵沒有松開);//如果按鍵沒有松開,程序會停在這里
count++;//按鍵松開後,程序會運行到這里,計數值加1
}
}
㈥ 單片機定時計數程序
搞一個定時中斷,到時間了測一次脈沖數。
㈦ 單片機程序中的計數程序應用講解
這個要求不過分,發段現成的小注釋下給你吧:
沒注釋的就是和計數無關的。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar DSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar Count = 0;
void main()
{
P0 = 0x00;
P2 = 0x00;
TMOD = 0x06;//這個是定時器的初始化 TMOD= 0000 0110 ,指定T0作為八位的計數器
TH0=255;
TL0=255; //這兩個是計數初值。
ET0=1;
EX0=1;
EA =1;//這三行是開中斷
IP =0x02;
IT0=1;
TR0=1;//這一行,是啟動T0
while(1)
{
P0 = DSY_CODE[Count/10];
P2 = DSY_CODE[Count%10];
}
}
void Clear_Counter() interrupt 0
{
Count = 0;
}
void Key_Counter() interrupt 1
{
Count = (Count + 1) %100;//這個地方,是1號中斷,也就是T0的中斷,每當次數到了,就會執
//行這里
}
你先看看,不懂就追問,我會回答你的
㈧ 單片機計數程序問題
把電路中顯示器周邊的三極體、電阻刪除,直接用IO介面,連接顯示器。
再試試下列程序。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar i, dat[3];
uint n,mb;
uchar code wei[3]={0xfb,0xfd,0xfe};//位驅動碼
uchar code an[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//字型碼
sbit P3_2=P3^2;
void delay(uint x)//延遲程序
{
uint a,b;
for(a=0;a<20;a++) for(b=x;b>0;b--);
}
void init() //初始化程序
{
TMOD=0x01; //定時器0工作方式1
TH0=0xec; //5MS每次中斷
TL0=0x78;
EA=1;
ET0=1;
TR0=1;
EX0=1; //外部中斷0允許
IT0=1; //外部中斷0邊沿觸發
}
void main()
{
init();
while(1) {
for(i = 0; i < 3; i++) {
P2 = wei[i];
P0 = ~an[dat[i]];
delay(30);
P2 = 0;
}
}
}
void External0() interrupt 0//外部中斷0
{
n++;
}
void Timer0() interrupt 1//定時中斷程序
{
TH0 = 0xec;
TL0 = 0x78;
if(n == 0) dat[0] = dat[1] = dat[2] = 0;//5秒檢測不到 n復位
else {
mb = 12000 / n;
dat[2] = mb % 10;//取個位
mb = mb / 10;
dat[1]=mb % 10;
dat[0]=mb / 10;
}
n = 0;
}
㈨ 單片機計數程序
#include <reg52.h>
sbit Switch = P2^0;
sbit P3_0 = P3^0;
sbit P3_1 = P3^1;
#define uchar unsigned char
#define uint unsigned int
bit key_state;
//***********************************************************
void mDelay(uint temp)
{uint i;
while(temp!=0)
{temp--;
for(i=0;i<5000;i++);
}
}
//************************************************************
//************************主程序******************************
void main()
{ uchar count=0;
P3_0=1;
P3_1=1;
while(1)
{
if(Switch==1) key_state=1; else key_state=0;
if((Switch==0)&&(key_state==1))
{key_state=0;
count+=1; if(count==10)
{
P3_1=0;mDelay(200);//調括弧的數來完成1S。
P3_0=0;
}
}
}
}
//此程序沒有經過實際驗證.給你一個參考吧.是按你的功能寫的.你可以下載進試驗,有問題請告知.應該能達到你的要求.不行加我的網路HI啊
㈩ 51單片機的計數器程序
你得在P3.5引腳外部加計數脈沖信號呀,T1才能計數的。就用你的程序,模擬的結果如下圖,並用數碼管顯示了TL1=1的狀態了。