單片機的c語言
A. 單片機 c語言編寫
單片機C語言編寫與普通電腦C語言類似,只不過硬體成分更多些。比如:
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsigned char sec=0,min=0,hour=12,scanled;
unsigned char key,time;
unsigned char disdat[6];
sbit K=P1^0;
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
void t0isr() interrupt 1 //秒計時
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
dischg();
}
void t1isr() interrupt 3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case 4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case 5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=50;
min=59;
hour=23;
scanled=0;
time=0;
key=0;
dischg();
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=2;
}
switch(key)
{
case 0:
TR0=1;
break;
case 1:
TR0=0;
break;
}
}
}
B. 單片機c語言編程
單片機C語言程序設計入門課程,說起來容易,說起來難。學習單片機C語言,首先要了解這兩個東西是什麼。單片機入門編程主要是學習C語言,其次是電路和編程語言。單片機C語言程序設計學習中必讀的模擬電、數字電、電路三本書,為接下來的學習做鋪墊。看書的目的是因為網上教程太多,容易出現偏差。其實只要能懂電路原理,就能開發單片機軟體。簡介單片機又稱單片微控制器,不是執行某種邏輯功能的晶元,而是將一個計算機系統集成到一個晶元中。相當於一台微型計算機,與計算機相比,單片機只是缺少I/O設備。綜上所述,晶元變成了電腦。它體積小、重量輕、價格低,為研究、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理和結構的最佳選擇。單片機已經廣泛應用於智能儀器、實時工業控制、通訊設備、導航系統、家用電器等領域。自20世紀90年代以來,單片機技術得到了發展。隨著時代的進步和科技的發展,這項技術的實際應用也越來越成熟,單片機被廣泛應用於各個領域。如今,人們越來越重視單片機在智能電子技術中的發展和應用,單片機的發展進入了一個新的時期。無論是自動測量的實踐,還是智能儀器的實踐,都可以看到單片機技術的身影。在當前的產業發展過程中,電子產業是一個新興的產業。在工業生產中,人們已經成功地應用了電子信息技術,將電子信息技術與單片機技術相結合,有效地提高了單片機的應用效果。作為計算機技術的一個分支,單片機技術在電子產品領域的應用豐富了電子產品的功能,為智能電子設備的開發和應用提供了新的途徑,實現了智能電子設備的創新和發展。以上內容參考:網路-單片機
你應該先學習C語言。你可以讀譚浩強和單片機的書,循序漸進。別擔心。基礎好,什麼都能說。
如果你沒學過微機原理,建議你先學完再買本上海馬超的書,一周就能看懂了~
不認同無意義的光。《C編程》確實創造了一時的輝煌,這種輝煌很可能會延續下去,但不代表就是最好的。這本書之所以流行,是因為當時沒有辦法學習C,這本書很好理解。但是現在這本書太落後了,甚至3版還在用老標准,現在大家普遍用C99標准。老標准不能用Dev C編譯而且好像提問者應該知道C的基礎,推薦《單片機C語言編程及實例》這本書。直接搜索就能找到PDF版本的下載。-馬克·提埃洛
看譚浩強老師的。清華大學出版的《飢餓》。
C. 單片機的C語言編程
#include <AT89X51.h> //包含頭文件
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義數碼管位選碼
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//定義數碼管段選碼
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10}; //顯示碼數組,因為只用了六個數碼管,所以將最後兩位賦值為10對應與段碼0x00,表示不亮
unsigned char temp[8]; //暫存數組
unsigned char dispcount; //掃描位的記錄
unsigned char T0count; //計數次數
unsigned char timecount; //定時器5ms中斷的次數
bit flag; //定義標志位
unsigned long x; //定義變數用來存放頻率值
void main(void)
{
unsigned char i;
TMOD=0x15; //定義定時器0為計數方式,定時器1為記時方式,均工作在方式1
TH0=0; //定時器0初值高8位為0
TL0=0; //定時器0初值低8位為0
TH1=(65536-5000)/256; //定時器1初值高8位
TL1=(65536-5000)%256; //定時器1初值低8位,即定時5ms
TR1=1;//啟動定時器1
TR0=1;//啟動定時器0
ET0=1;//開定時器0中斷
ET1=1;//開定時器1中斷
EA=1; //開總中斷
while(1)
{
if(flag==1) //如果定時時間到了1s
{
flag=0; //標志位清零
x=T0count*65536+TH0*256+TL0; //獲得整型的頻率值,T0count計數器在1s內溢出的次數,每溢出一次就計數了T0count*65536次,再加上當前計數寄存器的值即為實際計數總數
for(i=0;i<8;i++)
{
temp[i]=0; //暫存緩沖區清零
}
i=0;
while(x/10) //將頻率值的每一位分離出來,存進temp數組,例如63239分離為6、3、2、3、9
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++)
{
dispbuf[i]=temp[i]; //將暫存數組的數據賦給顯示數組
}
timecount=0; //記時清零
T0count=0; //計數清零
TH0=0; //定時器0初值清零
TL0=0; //定時器0初值清零
TR0=1; //重新啟動定時器0,其實是作為計數器來用
}
}
}
void t0(void) interrupt 1 using 0 //每個計數中斷一次
{
T0count++; //計數加一
}
void t1(void) interrupt 3 using 0 //5ms產生一次中斷
{
TH1=(65536-5000)/256; //
TL1=(65536-5000)%256; //重裝初值
timecount++;
if(timecount==200) //當timecount=200時,即為1s
{
TR0=0; //關閉定時器0,為了讀出定時器0計數個數
timecount=0; //timecount清零,重新計時
flag=1; //置標志位通知主程序1s已到
}
/**********以下為數碼管掃描部分**********/
//因為放在該中斷程序中,故每5ms掃描一位數碼管
P2=0xff; //先關閉所有數碼管
P0=dispcode[dispbuf[dispcount]]; //先確定相應數碼管的段碼,送入段碼
P2=dispbit[dispcount]; //送入位碼
dispcount++; //下一次應該掃描下一位數碼管所以要加一
if(dispcount==8) //因為共有8個數碼管
{
dispcount=0; //掃描完第7個,回頭掃描第0個
}
}
D. 單片機的編程語言
單片機的編程語言有三種:機器語言、匯編語言和高級語言。
因為單片機有限的存儲空間需要靠精打細算來設計程序,根本經不起高級語言臃腫的代碼體積,所以用C語言開發單片機是一個折中、更優的方案。
E. 單片機C語言編程
KEY4EQU30H
KEY2EQU31H
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
CLREA
MOVSP,#5FH
MOVKEY2,#0
MOVKEY4,#0
LOOP:
JBP1.0,LOOP
MOVR7,#10
LCALLDELAY
JBP1.0,LOOP
JNBP1.0,$
MOVP3,#0C0H
LOOP0:
LCALLKEYDEAL
MOVA,KEY4
JNZLOOP41
MOVA,P3
ANLA,#0F0H
ORLA,#0EH
MOVP3,A
SJMPLOOP21
LOOP41:
DECA
JNZLOOP42
MOVA,P3
ANLA,#0F0H
ORLA,#0DH
MOVP3,A
SJMPLOOP21
LOOP42:
DECA
JNZLOOP43
MOVA,P3
ANLA,#0F0H
ORLA,#0BH
MOVP3,A
SJMPLOOP21
LOOP43:
DECA
JNZLOOP21
MOVA,P3
ANLA,#0F0H
ORLA,#07H
MOVP3,A
LOOP21:
MOVA,KEY2
JNZLOOP22
MOVA,P3
ANLA,#0FH
ORLA,#20H
MOVP3,A
SJMPLOOP3
LOOP22:
DECA
JNZLOOP3
MOVA,P3
ANLA,#0FH
ORLA,#10H
MOVP3,A
LOOP3:
LJMPLOOP0
;----------------------------
DELAY:
MOVR2,#2
DLY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY1
DJNZR7,DELAY
RET
;-----------------------------
KEYDEAL:
JBP1.1,KEYEN1
MOVR7,#10
LCALLDELAY
JBP1.1,KEYEN1
JNBP1.1,$
INCKEY4
MOVA,KEY4
ANLA,#03H
MOVKEY4,A
KEYEN1:
JBP1.2,KEYEN2
MOVR7,#10
LCALLDELAY
JBP1.2,KEYEN2
JNBP1.2,$
INCKEY2
MOVA,KEY2
ANLA,#01H
MOVKEY2,A
KEYEN2:
RET
;-----------------------------
F. 單片機的C語言的內容簡介
本書是普通高等教育「十一五」國家級規劃教材。本書以標准C語言和MCS-51單片機為基礎,全面系統地介紹單片機的C語言程序設計與應用的基本問題,是一本重在應用、兼顧理論的實用教程。主要內容包括:單片機的C語言概述、C51語言程序設計基礎、單片機內部資源和外部擴展資源的C51語言編程、μVision2集成開發環境的使用、MCS-51系列單片機簡介等。本書包含大量單片機的C語言設計實例,並提供免費電子課件。
本書可作為高等學校電氣與電子信息專業和計算機專業的本專科教材,也可供從事單片機應用與產品開發工作的工程技術人員學習參考。
G. 單片機C語言
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit wei1=P1^2;//四個個數碼管的位驅動(陽極)
sbit wei2=P1^3;
sbit wei3=P1^4;
sbit wei4=P1^5;
uint a=0;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
TMOD=0x01;// 定時器1工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=0;//上電先不啟動
while(1)
{
if(key1==0)//判斷按鍵是否按下
{
Delay1ms(10);//延時消抖
if(key1==0)
{
flag1=1;
}
}
else flag1=0;
if(key2==0)//判斷按鍵是否按下及是否在走時
{
Delay1ms(10);//延時消抖
if(key2==0)
{
flag2=1;
}
}
P0=table[b]
}
}
//中斷子程序
void Timer0(void) interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a++;
if(a==20)
{
a=0;
if(flag1==1)
{
b++;
if(b==10) b =0;
}
if(flag2==1)
{
b--;
if(b==0) b =9;
}
}
}
H. 單片機c語言是什麼意思
單片機是一種集成在電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的計算機系統。
C語言是一種計算機程序設計語言。它既具有高級語言的特點,又具有匯編語言的特點。它由美國貝爾研究所的D.M.Ritchie於1972年推出。1978後,C語言已先後被移植到大、中、小及微型機上。它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。它的應用范圍廣泛,具備很強的數據處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫。具體應用比如單片機以及嵌入式系統開發。