當前位置:首頁 » 編程語言 » 單片機c語言備注
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

單片機c語言備注

發布時間: 2022-10-03 03:43:46

⑴ 我問一個c語言和單片機的問題麻煩高人幫我寫下備注

#include <reg51.h>//頭文件,一般是51的片子的
#define seg P2 //定義seg為P2口
#define segBit P3 // 同上
unsigned char code Table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e};
//共陽數碼管的編碼,自左向右一次是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
void delay(unsigned char n)//延時函數,
{
unsigned char i;
for(i=0; i<n;i++);
}

main()
{
unsigned char num=0;
unsigned char i;

while(1)//進行鍵盤掃描
{
P1=0xff;//將P1口做輸入口
if((P1&0x40)!=0x40)
{
delay(10);//軟體去抖
if((P1&0x40)!=0x40)
{
while((P1&0x40)!=0x40);
num++;
}
}
for(i=0;i<4;i++)
{
P3=~(0x01<<i);//估計是選擇需要點亮的數碼管
P2=Table[num+i];//數碼管要顯示的數
delay(20);
}
}

}
for語句裡面的內容是不是反了???呵呵呵。。俺也是新手,不是很了解。

⑵ 單片機c語言,這份代碼我看不懂,打打注釋

/*
題目:同時用兩個定時器控制蜂鳴器發聲,
定時器0控制頻率,定時器1控制同個
頻率持續的時間,間隔2s依次輸出
1,10,50,100,200,400,800,
1k(hz)的方波?
設晶振頻率為12MHz。
*/
/*********************************************************/
#include<reg52.h>//52單片機頭文件
#include<intrins.h>//包含有左右循環移位子函數的庫
#defineuintunsignedint//宏定義
#defineucharunsignedchar//宏定義
sbitbeep=P2^3;//應該是蜂鳴器吧採的
uchartt;//自定義計數全局變數
uintfre,flag;//自定義全局變數

voidmain() //主函數
{
fre=50000;//設置主頻50KHZ
beep=0;//應該是蜂鳴器關閉
TMOD=0x11;//設置定時器0,定時器1為工作方式1---16位計時器
TH0=(65536-fre)/256;//T0定時器高位計數設置60
TL0=(65536-fre)%256;//T0定時器低位計數設置
TH1=(65536-50000)/256;//T1定時器高位計數設置
TL1=(65536-50000)%256;//T1定時器低位計數設置
EA=1;//開總中斷
ET0=1;//開定時器0中斷
ET1=1;//開定時器1中斷
TR1=1;//啟動定時器1
TR0=1;//啟動定時器0
while(1);//等待中斷產生

}

voidtimer0()interrupt1//定時器0中斷
{
TR0=0;//進中斷後先把定時器0中斷關閉,防止內部程序過多而造成中斷丟失
TH0=(65536-fre)/256;//重置定時器高位計數
TL0=(65536-fre)%256;//重置定時器低位計數
tt++;//累加,為了下面邏輯
//依據flag設置主頻及翻轉蜂鳴器
if(flag<40)
if(tt==10)
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=40&&flag<80)
{
tt=0;
fre=50000;
beep=~beep;
}
if(flag>=80&&flag<120)
{
tt=0;
fre=10000;
beep=~beep;
}
if(flag>=120&&flag<160)
{
tt=0;
fre=5000;
beep=~beep;
}
if(flag>=160&&flag<200)
{
tt=0;
fre=2500;
beep=~beep;
}
if(flag>=200&&flag<240)
{
tt=0;
fre=1250;
beep=~beep;
}
if(flag>=240&&flag<280)
{
tt=0;
fre=625;
beep=~beep;
}
if(flag>=280&&flag<320)
{
tt=0;
fre=312;
beep=~beep;
}
if(flag>=320&&flag<360)
{
tt=0;
fre=156;
beep=~beep;
}
TR0=1;//T0使能
}
voidtimer1()interrupt3//定時器1中斷用來產生2秒時間定時
{
TH1=(65536-50000)/256;//重置定時器高位計數
TL1=(65536-50000)%256;//重置定時器低位計數
flag++;//主頻重置flag
if(flag==360)
{
flag=0;
fre=50000;
}
TR1=1;//這里少了個T1使能
}

⑶ C語言單片機電子表注釋在線等!!

你好!
很多語句都是重復的
1、下面定義數碼管段變數
unsigned char ledreg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//
2、定義時分秒的變數
unsigned char dismod=0,setmod=0,hour=12,min=0,sec=0,count=0;
3、延時函數
void delay()
4、主函數
void main()
5、1號中斷函數
void intt0() interrupt 1
6、0號中斷函數
void intt0() interrupt 0
7、2號中斷函數
void intt0() interrupt 2

⑷ 51單片機C語言程序注釋標注(寫全)

#include<reg51.h>//調用頭文件reg51.h
voidmain()//主函數
{
unsignedchar//無符號字元型
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//定義一個數組LED數碼管解碼用的碼表
while(1)//主循環
{
P2=P2|0x07;//P2口與0x07按位進行或運算
while(P2&0x07==0x07);//如果P2扣低三位為111則原地等待
switch(P2&0x07)//獲取P2低三位值並且據此執行響應的操作
{
0x06:P0=tab[0x0D];break;//P2低三位為06H,數碼管顯示「d」
0x05:P0=tab[0x0E];break;//P2低三位為05H,數碼管顯示「E」
0x03:P0=tab[0x0F];break;//P2低三位為03H,數碼管顯示「F」
}
}
}

⑸ 單片機C語言,求大俠們,把每一項的註解標到後面,謝謝。

#include <reg52.h> //調用頭文件reg52.h
sbit RS=P2^6; //位定義 把P2的第六位定義為RS 以後操作RS等同於操作P2^6
sbit RW=P2^5; //同上
sbit E=P2^7; //同上
unsigned char busy; //把變數busy定義為 無符號字元變數
void delay(unsigned char asf) //這是個延時函數 括弧內asf 為延時的時間
{while(asf--);}//當asf>=1時一直在這循環,直到asf<1.
lcd_busy()//這是寫一個函數 不過前面應該加上void 變為 void lcd_busy()
{RS=0;RW=1;E=1;P0=0X80;delay(0xff);//把0賦值給RS 把1賦值給RW 把1賦值給E。P0口輸出0x80 延時0xff這么長時間。
if(P0==0X00)//if判斷語句 當P0=0x00時執行下面busy=0x00語句
busy=0x00; //把0賦值給busy
else //如果上面的if判斷不成立則執行busy=0x01
busy=0x01;//同上
}
write_cmd(unsigned char cmd)//創建子函數 口號內為定義cmd為無符號字元型變數
{
busy=1; //同上
while(busy)因為busy=1 所以會一直執行下面大括弧內的語句 你這少了個括弧
{
lcd_busy(); //調用lcd_busy()這個函數 在上面了
RS=0;RW=0;E=0;P0=cmd;//前三個是賦值語句和上面一樣,後面是把cmd的值給P0
delay(0xff);延時函數 同上
E=1;//普通賦值
delay(0xff);延時函數 同上

E=0;//普通的賦值
}
lcd_cmd()//同上創建子函數
{
write_cmd(0x38);調用上面的write_cmd(unsigned char cmd)函數其中cmd被賦值為0x38
write_cmd(0x08);//同上
write_cmd(0x01);//同上
write_cmd(0x06);//同上
write_cmd(0x0c);//同上
write_cmd(0x84);//同上
}
lcd_date()//這個函數參考上面的lcd_busy()
{
busy=1;
while(busy)
lcd_busy();
RS=1;RW=0;E=0;P0=0X62;
delay(0xff);E=1;delay(0xff);E=0;
}
main()主函數
{lcd_cmd();lcd_date();while(1);}分別調用lcd_cmd();lcd_date();這兩個子函數。while(1)死循環,函數執行到這就 一直執行這個。

⑹ 51單片機c語言程序備注,打不了這么多字見者與我聯系,可談價格

這個可以用定時器來做,比如檢查某鍵,按鍵時間超過2秒後一個變數開始累加知道鍵釋放為止。實現方法如下:#include#defineuintunsignedint#defineucharunsignedcharuintv=0,time=0;sbitkey=P1^0;voidt0isr()interrupt1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;time++;if((key==0)&&(time>40)v++;//如果按鍵時間超過2秒且鍵未釋放,變數+1if(key==1)time=0;//如果鍵釋放,時間復位}main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;while(1);}

⑺ 求C語言 單片機 數字鍾注釋

#include<reg52.h>
sbit ksec=P3^0; //定義P3.0埠
sbit kmin=P3^1;
sbit khour=P3^2;
unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0;
unsigned int num=0,sec=0,min=0,hour=0; //時分秒的初值
unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(unsigned int z) //延時程序,
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

}
void keyscan();
void display();
void main()
{TMOD=0x01; //T/CO 工作在定時器方式1
TH0=(65536-50000)/256; //預置計數初值
TL0=(65536-50000)%256;
EA=1; //CPU開中斷
ET0=1; //T/CO開中斷
TR0=1; //啟動T/CO開始定時
while(1)
{display();
keyscan();
}
}

void time0() interrupt 1 //T/CO中斷服務程序入口
{num++;
TH0=(65536-50000)/256; //計數初值重裝載
TL0=(65536-50000)%256;
}

void display()
{if(num==20) //當時間計數到1秒,秒數加一
{num=0;
sec++;
if(sec==60) //秒數計數到60,分鍾數加一,秒鍾數返0
{sec=0;
min++;
if(min==60)
{min=0;
hour++;
if(hour==24)
{hour=0;
min=0;
sec=0;
}
}
}
}

⑻ 在線等單片機程序C語言注釋

不難啊,認真點,把拼音還有變數的英文翻譯出來,看下的話就知道了,看你貼的代碼,功能應該是獲取溫度,濕度,光照強度,然後串口列印的吧?,然後串口接收到的數據,通過digitalWrite控制個什麼,這個函數暫時看不出不知道做什麼。

⑼ 單片機 C語言 這個程序的大致意思望備注 謝謝!!!

#include"AT89X52.h"

unsignedcharSHUMA[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsignedcharKeyScan(void)//獨立按鍵檢測
{
if(P3_1==0) //P3.1為鍵K1
{
return1;
}
elseif(P3_0==0)//P3.0為鍵K2
{
return2;
}
elseif(P3_2==0)//P3.2為鍵K3
{
return3;
}
elseif(P3_3==0)//P3.3為鍵K4
{
return4;
}
else
{
return0;//沒有按鍵返回0
}
}
voidDisplay(unsignedcharNum)//數碼管顯示程序
{
P2_4=0;P2_3=0;P2_2=0;//段選控制位
P0=SHUMA[Num];//位碼送P0口
}
voidmain(void)
{
while(1)
{
if(KeyScan()==1)//按鍵K1按下
{
Display(1);//顯示「1」
}
elseif(KeyScan()==2)//按鍵K2按下
{
Display(2);//顯示「2」
}
elseif(KeyScan()==3)//按鍵K3按下
{
Display(3);//顯示「3」
}
elseif(KeyScan()==4)//按鍵K4按下
{
Display(4);//顯示「4」
}
else
{
Display(0);//沒有按鍵顯示「0」
}
}

}

⑽ 求單片機 數字鍾 c語言代碼注釋

#include<reg51.h>
unsigned char code su[11]={0x3f,0x06,0x5b,0X4F,0x66,0X6D,0x7d,0x07,0x7f,0x6f,0x40};//數碼管顯示
unsigned char xian[8]={0,0,10,0,0,10,0,0};
unsigned char sen=0,min=0,hou=0,sen2=0,min2=0,hou2=0,sen3=59,min3=59,hou3=23,num;//變數定義
//--------引腳定義
sbit ks=P1^4; //秒按鍵
sbit km=P1^5; //分按鍵
sbit kh=P1^6; //時按鍵
sbit ds=P1^7;
sbit bb=P3^4;

//-------8個數碼管位顯示介面
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;

bit jp1,jp2,jp3;//位定義
int n=0,jp4;
//----演示程序
void daly()
{
unsigned char j;
for(j=60;j;j--);//for循環
}

//------數碼管顯示
void show()
{
xian[0]=hou/10; //時的十位
xian[1]=hou%10; //時的個位
xian[3]=min/10; //分的十位
xian[4]=min%10; //分的個位
xian[6]=sen/10; //秒的十位
xian[7]=sen%10; //秒的個位

P0=su[xian[7]]; //八段數碼管顯示秒的個位
P20=0; //動態顯示,打開第一個數碼管
daly(); //延時
P20=1; //動態顯示,關閉第一個數碼管

P0=su[xian[6]];//八段數碼管顯示秒的十位
P21=0;//動態顯示,打開第二個數碼管
daly();//延時
P21=1;//動態顯示,打開第二個數碼管
//--------------------
P0=su[xian[5]];//註:你xian[3]xian[5]都為從定義
P22=0;
daly();
P22=1;

//-------------分個位的顯示
P0=su[xian[4]];
P23=0;
daly();
P23=1;
//-----------
P0=su[xian[3]];//註:你xian[3]xian[5]都為從定義
P24=0;
daly();
P24=1;
//------------分十位的顯示
P0=su[xian[2]];
P25=0;
daly();
P25=1;
//-------------時個位的顯示
P0=su[xian[1]];
P26=0;
daly();
P26=1;
//-----------時十位的顯示
P0=su[xian[0]];
P27=0;
daly();
P27=1;
}

//---------按鍵程序
void key()
{
if((ks==0)&&(jp1==0))
{
jp1=1;//秒按鍵生效
daly();//消抖
if(ks==0) sen++; //秒加1
}
else if((ks==1)&&(jp1==1)) jp1=0;//秒按鍵未生效

if(sen==60)//等於60時
{
min++;//分加1
sen=0;//秒清零
}
if((km==0)&&(jp2==0))
{
jp2=1;//分按鍵生效
daly();//消抖
if(km==0) min++;//分加1
}
else if((km==1)&&(jp2==1)) jp2=0;//分按鍵未生效
if(min==60)//等於60時
{
hou++;//時加1
min=0;//分清零
}
if((kh==0)&&(jp3==0))
{
jp3=1;//時按鍵生效
daly(); //消抖
if(kh==0) hou++;//時加1
}
else if((kh==1)&&(jp3==1)) jp3=0;//時按鍵未生效
if(hou==24) hou=0;//時為24時,清零
if(ds==0)//定時操作
{
daly();//消抖
while(ds==0);
daly();
if(ds==1) jp4++;//定時按鍵生效,加一
if(jp4>1) jp4=0;//JP4隻能是一。
/*註:就本人感覺而言這兩句就是廢話,一句就能完事:if(ds==1) jp4=1;*/
}
}

//-------從功能上看這是定時
dings()
{
EA=0; //關閉中斷
TR0=0;//T0停止計數
hou2=hou;//把現有的時分秒,保留儲存在hou2,min2,sen2
min2=min;
sen2=sen;
hou=0; //清零
min=0;
sen=0;
while(jp4==1) //等待直到按鍵生效
{
hou3=hou; //把現有的時分秒,保留儲存在hou3,min3,sen3
min3=min;
sen3=sen;
show(); //現實
key();//按鍵掃描
hou3=hou;//把按鍵後更改的時分秒,也就是定時時間,保留儲存在hou3,min3,sen3
min3=min;
sen3=sen;
}
hou=hou2;//把遠有的時間分別還原
min=min2;
sen=sen2;
EA=1;//開中斷
TR0=1;//T0計數
}

void main()
{
TMOD=0x01;//定時器0方式1
TH0=45535>>8;//賦初值
TL0=45535;
EA=1; //允許中斷
ET0=1;//T0中斷使能
EX1=1;//外部中斷1
TR0=1;//T0開始計數

hou3=99;
min3=99;
sen3=99;

while(1)
{
show();//顯示
key();//按鍵程序
dings();//定時操作
if(((hou*60+min))*60+sen>=((hou3*60+min3))*60+sen3 )//判斷是否到了定時時間
{
bb=0;//蜂鳴器鳴叫(也可能是其他音樂晶元)
num++;
if(num>=500) //鳴叫延時
{
bb=1; //蜂鳴器關閉
num=0; //延時計數清零
jp4=0;//位清零
hou3=99;//重新賦值
min3=99;
sen3=99;
}
}
}
}

void_time0_(void)interrupt 1
{
TL0=45535; //定時器0重新賦值
TH0=45535>>8;
if(++n==50) //1秒
{
n=0;
sen++; //秒加1
if(sen==60) //加到60
{
min++;
sen=0;
}//分加1
if(min==60)//加到60
{
hou++;
min=0;
}//時加1
if(hou==24) hou=0;//24時,時變成0
}
}
說實話,這個程序編寫的很爛。