當前位置:首頁 » 編程語言 » 51單片機c語言開發

51單片機c語言開發

發布時間: 2022-03-07 17:44:32

Ⅰ 51單片機c語言開發與實例的目錄

第1章MCS-51單片機與C語言
1.1MCS-51單片機的特點
1.1.1MCS-51單片機簡介
1.1.2MCS-51單片機的內部結構
1.1.3MCS-51單片機的存儲器組織
1.2匯編語言
1.3C語言
1.4單片機匯編語言與C語言程序設計對照
1.5匯編語言和C語言混合編程
1.5.1在C51中嵌入匯編
1.5.2C程序中調用匯編功能程序
1.5.3匯編程序調用C程序
第2章KeilC51的數據結構
2.1KeilC51
2.2數據類型
2.3存儲種類及存儲區
2.3.1整型常量
2.3.2字元型常量
2.3.3字元串常量
2.3.4位標量
2.4變數
2.4.1變數的定義
2.4.2存儲器類型
2.4.3存儲器模式
2.4.4重新定義數據類型
2.5數組
2.6指針
2.7結構
2.8聯合
2.9枚舉
第3章KeilC51程序設計
3.1預處理
3.2運算符與表達式
3.3控制流語句
3.3.1條件語句
3.3.2while循環
3.3.3do-while循環
3.3.4for循環
3.3.5goto語句
3.3.6switch語句
3.3.7Break語句和continue語句
3.3.8返回語句return
3.4函數
3.4.1定義函數
3.4.2調用函數
3.4.3中斷服務函數
3.4.4函數的遞歸調用與再入函數
第4章KeilC51集成開發環境
4.1KeilC51安裝
4.2μVision3集成開發環境
4.3μVision3的欄目和窗口
4.4創建項目
4.5簡單的程序調試
4.6含有多個文件的項目
4.7代碼優化
4.8技巧和竅門
4.9KeilC編譯器常見警告與錯誤信息的解決方法
第5章用KeilC51開發8051單片機內部資源
5.1用KeilC51開發輸入/輸出埠
5.1.1輸入/輸出埠簡介
5.1.2輸出埠應用實例
5.1.3輸入埠實例
5.2用KeilC51開發定時器/計數器
5.2.1定時器/計數器簡介
5.2.2控制和狀態寄存器
5.2.3定時器/計數器設置實例
5.2.4定時器/計數器2
5.2.5編程實例
5.3中斷系統編程
5.3.1中斷系統
5.3.2中斷系統的控制寄存器
5.3.3中斷的響應過程
5.3.4中斷實例
5.4用KeilC51開發串列口
5.4.1數據通信的基本概念
5.4.2MCS-51的串列口控制寄存器
5.4.3工作方式
5.4.4數據傳輸率的確定
5.4.5串列通信實例
第6章單片機的資源擴展
第7章8051單片機的系統設計
第8章8051單片機程序固化方法
第9章單片機的斷電保護
第10章單片機與PC機通信
第11章在系統編程和在應用中編程
第12章單片機之間的通信
第13章I2C匯流排介面技術
第14章用C51開發線切割機床控制器
第15章步進電機驅動
第16章紅外器件應用
附錄AMCS-51指令表
附錄BKeilC51的庫函數

Ⅱ 求51單片機C語言編程

#include<stc89.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00};
uchar led[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0xFF};
sbit adrd=P3^7;
sbit adwr=P3^6;
sbit la=P2^6;
sbit wela=P2^7;
uchar date1=0;
uchar date2=50;
uchar date3=100;
uchar date4=150;
uchar date5=200;
uchar date6=255;
uchar a,sz;
void init();
void delay(uint z);
uchar adchushihua();
void shumaguan(uint shu);
void processing();
void main()
{
init();
while(1)
{

sz=adchushihua();
for(a=10;a>0;a--)
{
shumaguan(sz);
processing();
}
}
}
void init()
{
P0=0x7f;

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar adchushihua()
{
uchar shu;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;

P1=0xff;

adrd=1;
_nop_();
adrd=0;
_nop_();
shu=P1;
adrd=1;
return shu;
}
void shumaguan(uint shu)
{
uchar ,shi,ge;
=shu/100;
shi=shu%100/10;
ge=shu%10;
la=1;
P0=table[];
la=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);
la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);
la=1;
P0=table[ge];
la=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);
}
void processing()
{
if((sz>=date1)&&(sz<=date2))
{
P1=0xfe;
}
else if((sz>=date2)&&(sz<=date3))
{
P1=0xfd;
}
else if((sz>=date3)&&(sz<=date4))
{
P1=0xfb;
}
else if((sz>=date4)&&(sz<=date5))
{
P1=0xf7;
}
else if((sz>=date5)&&(sz<date6))
{
P1=0xef;
}
else if(sz==date6)
{
P1=~P1;
delay(20);
}
}
這個是我剛剛寫的 根據你的需要 反正閑來無事 我寫的比較籠統 需要你自己根據 自己的實際情況來判斷確定 我只是利用AD簡單的處理 成數碼管顯示的數字 你要是 轉換成電壓 那就把裡面的變數 修改一下 我寫的那個控制LED燈亮就不要動了 只是修改一下他前面定義的數字就可以 最後那個是我自己加上去的有點趣味性 希望對你有幫助

Ⅲ 51單片機 C語言編程

首先要明確單片機的埠名稱一般都是規定好了的(參考該單片機的datasheet);
其次,要給某個埠賦值(1或0),還是給埠組(8位單片機一個組八個腳)賦值,這就是按位操作還是按位元組操作的問題。例如:單片機有PA口,PB口,其中PA口有PA0~PA7八個腳,拉高PA口(PA = 0XFF;),拉高PA0腳(PA &=0X01;或者PA0 = 1; )。當然有些單片機是通過讀寫IO口輸入輸出寄存器來實現的。
再者,RTX,TDX兩個腳應該是通信的腳,與通用IO口為復用的腳,要怎麼用,怎麼發送數據、接收數據就涉及到通信協議了,不同通信方式,工作方式就不一樣了,具體(參考該單片機的datasheet)。

建議先仔細閱讀單片機的datasheet和該單片機的編程指南(如果有的話)

希望能解決你的疑問

Ⅳ 51單片機C語言編程

// 51單片機C語言編程,這個時鍾+秒錶可以參考一下。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0; //清零

sbit tiaofen=P1^1; //調分

sbit tiaoshi=P1^2; //調時

sbit sounder=P1^7; //naozhong

uint a,b;

uchar hour,minu,sec, //時鍾

hour0,minu0,sec0,//秒錶

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2,//顯示位

k,s;//狀態轉換標志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函數聲明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函數*************************/

void main()

{

init();

while(1)

{

while(TR1)

{

keyscan(); //掃描函數

while(s==1) //s是狀態標志,當s=0時,鬧鍾取消。s=1時,設定鬧鍾時間(也是通過調時,調分函數);

{ //s=2時,鬧鍾工作,時間與設定時刻一致時,鬧鍾響(一分鍾後自動關閉,可手動關閉)。再次切換,s=0.

keyscan(); //s狀態切換(0-》1-》2-》0)通過外部中斷1實現。

display(hour1,minu1,sec1); //鬧鍾時刻顯示

}

display(hour0,minu0,sec0);//時鍾表顯示

while(k) /*k是秒錶狀態(0-》1-》2-》0)通過外部中斷0實現。0秒錶關;1秒錶從零計時;2秒錶停,顯示計時時間*/

{

display(hour,minu,sec); //秒錶顯示

}

}

}

}

/*****************初始化函數***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11; //定時器0,1工作於方式1;賦初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1; //秒錶中斷

EX1=1; //鬧鍾設定中斷

ET0=1;

ET1=1;

IT0=1; //邊沿觸發方式

IT1=1;

PX0=1;

PX1=1;

TR0=0; //初始,秒錶不工作

TR1=1; //時鍾一開始工作

}

/*****************定時器0中斷*************/

void timer0_int() interrupt 1 //秒錶

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0; //毫秒級

minu++;

if(minu==60)

{

minu=0; //秒

hour++;

if(hour==60) //分

{

hour=0;

}

}

}

}

}

/*************外部中斷0中斷函數************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中斷1中斷函數************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定時器1中斷****************/

void timer1_int() interrupt 3 //控制時鍾工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0 && minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0;

}

}

}

}

/*************鍵盤掃描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else //調整時鍾時間

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************顯示函數****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************鬧鍾函數****************/

void sounde()

{

sounder=~sounder;

}

/*************延時函數****************/

void delay(uchar z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

Ⅳ 51單片機c語言

例如:
1、這樣單獨控制,理論上是先後亮的,但CPU跑的快,看起來是同時亮的
sbit led2=P1^1;
sbit led3=P1^2;
void main()
{
led1 = 0;
led2 = 0;
led3 = 0;
}
2、真正同時亮
void main()
{
P1=0xf8;
}

Ⅵ 51單片機c語言編程

對埠輸出操作,直接適用賦值語句即可。 比如 P1 = 0x03;
對埠讀取操作,直接賦值給局部變數即可。
對數碼管操作,需要先定義 對應的 碼表, Tab[16] = {, }分別對應 0~F 的埠輸出值、點亮相應的LED位; 然後直接 操作埠輸出對應字元即可,比如P1=Tab[3] 數碼管輸出顯示3

Ⅶ 求51單片機C語言編程

#include<reg52.h>
#include<intrins.h>
#define uintunsignedint
sbitk1=P3^2;
sbitbuz=P2^3;
voiddelay(uintt);//延時程序
voidinit();
voidmain()
{
init();
P1=0xfe;
while(1);
}

voiddelay(uintt)//延時程序
{
uinti,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}

voidinit()
{
IT0=0;
EX0=1;
EA=1;
}
voidcroled()interrupt0
{
buz=0;
delay(10);
if(k1==0)
{
while(k1==0);
P1=_crol_(P1,1);
buz=1;
}
}

熱點內容
FTP伺服器本地策略 發布:2025-01-13 13:20:47 瀏覽:485
地下城堡2掛機腳本 發布:2025-01-13 13:20:44 瀏覽:205
web雲伺服器配置 發布:2025-01-13 13:19:54 瀏覽:459
小康密碼是多少 發布:2025-01-13 13:19:13 瀏覽:41
javafile類 發布:2025-01-13 13:19:08 瀏覽:83
c語言求逆 發布:2025-01-13 13:14:43 瀏覽:929
中控大屏怎麼看配置 發布:2025-01-13 13:11:33 瀏覽:912
linux多行刪除 發布:2025-01-13 13:06:01 瀏覽:200
傳奇3離線腳本 發布:2025-01-13 13:05:08 瀏覽:751
java請求https 發布:2025-01-13 12:53:35 瀏覽:868