C語言實(shí)現(xiàn)LED燈閃爍控制配套51單片機(jī)開發(fā)板。
成都創(chuàng)新互聯(lián)專注于耀州企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。耀州網(wǎng)站建設(shè)公司,為耀州等地區(qū)提供建站服務(wù)。全流程按需策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
#include??? //包含單片機(jī)寄存器的頭文件
/****************************************
函數(shù)功能:延時(shí)一段時(shí)間
*****************************************/
void delay(void)??????? //兩個(gè)void意思分別為無需返回值,沒有參數(shù)傳遞。
{
unsigned int i;?????? //定義無符號(hào)整數(shù),最大取值范圍65535。
for(i=0;i20000;i++)? //做20000次空循環(huán)。
;?????????????? //什么也不做,等待一個(gè)機(jī)器周期。
}
/*******************************************************
函數(shù)功能:主函數(shù) (C語言規(guī)定必須有也只能有1個(gè)主函數(shù))。
********************************************************/
void main(void)
{
while(1)????? //無限循環(huán)。
{
P0=0xfe;?? //P1=1111 1110B, P0.0輸出低電平。
delay();?? //延時(shí)一段時(shí)間。
P0=0xff;?? //P1=1111 1111B, P0.0輸出高電平。
delay();? //延時(shí)一段時(shí)間。
}
}
單片機(jī)驅(qū)動(dòng)LED燈的源程序:
#includereg52.h //頭文件。
#define uint unsigned int
#define uchar unsigned char
sbit LED1=P1^7; //位定義。
void delay_ms(uint);//mS級(jí)帶參數(shù)延時(shí)函數(shù)。
void main()
{
while(1)
{
LED1=0;
delay_ms(1000);
LED1=1;
delay_ms(1000);
}
}
void delay_ms(uint z) //延時(shí)子程序
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
擴(kuò)展資料:
單片機(jī)應(yīng)用分類:
通用型:
這是按單片機(jī)(Microcontrollers)適用范圍來區(qū)分的。例如,80C51式通用型單片機(jī),它不是為某種專門用途設(shè)計(jì)的;專用型單片機(jī)是針對(duì)一類產(chǎn)品甚至某一個(gè)產(chǎn)品設(shè)計(jì)生產(chǎn)的,例如為了滿足電子體溫計(jì)的要求,在片內(nèi)集成ADC接口等功能的溫度測量控制電路。
總線型:
這是按單片機(jī)(Microcontrollers)是否提供并行總線來區(qū)分的??偩€型單片機(jī)普遍設(shè)置有并行地址總線、 數(shù)據(jù)總線、控制總線,這些引腳用以擴(kuò)展并行外圍器件都可通過串行口與單片機(jī)連接。
另外,許多單片機(jī)已把所需要的外圍器件及外設(shè)接口集成一片內(nèi),因此在許多情況下可以不要并行擴(kuò)展總線,大大減省封裝成本和芯片體積,這類單片機(jī)稱為非總線型單片機(jī)。
控制型:
這是按照單片機(jī)(Microcontrollers)大致應(yīng)用的領(lǐng)域進(jìn)行區(qū)分的。一般而言,工控型尋址范圍大,運(yùn)算能力強(qiáng);用于家電的單片機(jī)多為專用型。
通常是小封裝、低價(jià)格,外圍器件和外設(shè)接口集成度高。 顯然,上述分類并不是惟一的和嚴(yán)格的。例如,80C51類單片機(jī)既是通用型又是總線型,還可以作工控用。
參考資料來源:百度百科-單片機(jī)
如果是PC機(jī)需要配置一塊MOXA的TTL板卡來實(shí)現(xiàn)高低電瓶輸出:
1、先設(shè)定LED燈是低電平亮還是高電瓶亮,這里假設(shè)低電平;
2、設(shè)置一個(gè)定時(shí)器,在定時(shí)器里面寫代碼,分別發(fā)送高、低電瓶值可實(shí)現(xiàn)交替閃耀;
例程:
#include?reg51.h
sbit?led1?=?P0^0;
sbit?led2?=?P0^1;
void?delayms(unsigned?int?nMS)
{
unsigned?char?i,j;
while?(nMS--)
{
for?(i?=?12;?i0;?i--)
{
for?(j?=?246;?j0;?j--);
}
}
}
void?main()
{
while(1)
{
led1?=?0;
led2?=?1;//一亮一滅
delayms(100);
led1?=?1;
led2?=?0;//交換亮滅
delayms(100);
}
}
我寫的這個(gè)程序應(yīng)該可以,按一下燈亮,再按一下燈滅
#include
"REG52.H"
sbit
LED1_01
=
P1^1;
//LED燈
sbit
KEY0_01
=
P1^2;
//按鍵
void
Delay_1ms(unsigned
int
Time)
{
unsigned
int
x,
y;
for(x
=
Time;
x
0;
x--)
for(y
=
120;
y
0;
y--);
}
int
main(void)
{
LED1_01
=
1;
//打開LED燈點(diǎn)亮
while(1)
{
if(KEY0_01
==
0)
//檢測按鍵是否按下
{
Delay_1ms(10);
//延時(shí)去抖動(dòng)
if(KEY0_01
==
0)
//確定按鍵按下
{
LED1_01
=
~
LED1_01;
//取反LED燈
[
亮
.
滅
]
}
while(KEY0_01
==
0);
//檢測松手
}
}
}
你的圖里有A/D轉(zhuǎn)換器
AD轉(zhuǎn)換函數(shù)ADC_DIS.C
#include
REGX51.H
#include"def.h"
#include"lib.h"
sbit
adc_cs=P1^0;
sbit
adc_rd=P1^1;
sbit
adc_wr=P1^2;
/***ADC0804啟動(dòng)轉(zhuǎn)換函數(shù)***/
INT8U
start_ad()
{
INT8U
temp;
adc_cs=0;
adc_wr=1;
delay(1);
adc_wr=0;
delay(1);
adc_wr=1;
delay(1);
//啟動(dòng)AD
adc_rd=1;
delay(1);
adc_rd=0;
delay(1);
temp=P2;
delay(1);
adc_rd=1;
delay(1);
//讀取數(shù)據(jù)
return
temp;
}
用這個(gè)程序。