51单片机c语言程序集锦.docx

上传人:b****5 文档编号:11623067 上传时间:2023-03-29 格式:DOCX 页数:15 大小:18.61KB
下载 相关 举报
51单片机c语言程序集锦.docx_第1页
第1页 / 共15页
51单片机c语言程序集锦.docx_第2页
第2页 / 共15页
51单片机c语言程序集锦.docx_第3页
第3页 / 共15页
51单片机c语言程序集锦.docx_第4页
第4页 / 共15页
51单片机c语言程序集锦.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

51单片机c语言程序集锦.docx

《51单片机c语言程序集锦.docx》由会员分享,可在线阅读,更多相关《51单片机c语言程序集锦.docx(15页珍藏版)》请在冰豆网上搜索。

51单片机c语言程序集锦.docx

51单片机c语言程序集锦

#include

#include

//每65536时钟循环设置断点

staticunsignedlongoverflow_count=0;

voidtimer0_ISR(void)interrupt1

{

overflow_count++;//溢出记数

}

//MAINC

voidmain(void)

{

//设置16位模式,溢出中断

TMOD=(TMOD&0xF0)|0x01;//T/C0模式

ET0=1;//开T0中断

TR0=1;//开T0计数

EA=1;//开中断

while

(1)//循环

{

}

}

#include

unsignedcharex0_isr_counter=0;

voidex0_isr(void)interrupt0

{

ex0_isr_counter++;//Incrementthecount

}

voidmain(void)

{

ConfigureINT0(externalinterrupt0)togenerate

aninterruptonthefalling-edgeof/INT0(P3.2).

EnabletheEX0interruptandthenenablethe

globalinterruptflag.

IT0=1;//Configureinterrupt0forfallingedgeon/INT0(P3.2)

EX0=1;//EnableEX0Interrupt

EA=1;//EnableGlobalInterruptFlag

Waitforever.

while

(1)

{

}

}

Io口输出

//点亮P1口的一个灯

#include

/*------------------------------------------------

MAINCFunction

------------------------------------------------*/

voidmain(void)

{

P1=0xFF;//灯全不灭掉

while

(1)//主循环

{

P1=0xfe;//P1口的最低位点亮,可以更改数值是其他的灯点亮

}

}

//按下P3口的按键,P1显示相应的位置,IO读写操作程序

#include

sbitKEY=P3^0;//定义按键的接口

sbitLED=P1^0;//定义灯的接口

/*------------------------------------------------

MAINCFunction

------------------------------------------------*/

voidmain(void)

{

P1=0xFF;//所有的灯灭

while

(1)

{

LED=KEY;//灯的状态由按键的状态决定

}

}

//按下P3口的按键,P1显示相应的位置,IO读写操作程序

sfrP1=0x90;/*SFRdefinitionforPort1*/

sfrP3=0xB0;/*SFRdefinitionforPort3*/

/*------------------------------------------------

MAINCFunction

------------------------------------------------*/

voidmain(void)

{

unsignedcharpval;/*tempvariableforportvalues*/

P1=0xFF;/*SetupP1forInput*/

/*--------------------------------------

UsetheToolboxbuttonsinthedebugger

tochangethevalueofP1.Openthe

Port1andPort3dialogsfromthe

PeripheralsMenutoviewtheirstatus.

--------------------------------------*/

while

(1)

{

pval=P3;/*ReadP1intopval*/

P1=pval;/*WritepvaltoP3*/

}

}

跑马灯

#include

////////////////////////////////////////////////////////

voiddelay(unsignedintcnt)//简单的延时

{

while(--cnt);

}

///////////////////////////////////////////////////////

main()

{

P1=0xfe;//给初始化值

while

(1)

{

delay(30000);//delayatcrystalfrequencyin12MHz

P1<<=1;//左移一位

P1|=0x01;//最后一位补1

if(P1==0x7f)//检测是否移到最左端?

{

delay(30000);//delay

P1=0xfe;

}

}

}

定时器0

#include

sbitLED=P1^2;

voidInit_Timer0(void)

{

TMOD|=0x01;

TH0=0x00;/*Initvalue*/

TL0=0x00;

EA=1;/*interuptenable*/

ET0=1;/*enabletimer0interrupt*/

TR0=1;

}

main()

{

Init_Timer0();

while

(1);

}

voidTimer0_isr(void)interrupt1using1

{

TH0=0x00;/*Initvalue*/

TL0=0x00;

LED=~LED;//指示灯反相

}

定时器1

/*copyright2009,ShengzhenJinChuangElectronicTechnologyco.,Ltd

*

*ThissampleisusedforTimer116bittimermode.

*

*writebyShifang2009-4-23

*

*V1.1

*/

#include

sbitLED=P1^2;

voidInit_Timer1(void)

{

TMOD|=0x10;

TH1=0x00;/*Initvalue*/

TL1=0x00;

EA=1;/*interuptenable*/

ET1=1;/*enabletimer1interrupt*/

TR1=1;

}

main()

{

Init_Timer1();

while

(1);

}

voidTimer1_isr(void)interrupt3using1

{

TH1=0x00;/*Initvalue*/

TL1=0x00;

LED=~LED;

}

定时器2

/*copyright2009,ShengzhenJinChuangElectronicTechnologyco.,Ltd

*

*ThissampleisusedforTimer116bittimermode.

*

*writebyShifang2009-4-23

*

*V1.1

*/

#include

sbitLED=P1^2;

voidTIM2Inital(void)

{

RCAP2H=(65536-60000)/256;//@12M10ms16bit自动重载

RCAP2L=(65536-60000)%256;

ET2=1;

EA=1;

TR2=1;

}

main()

{

TIM2Inital();

while

(1);

}

voidTimer0_isr(void)interrupt1using1

{

TH0=0x00;/*Initvalue*/

TL0=0x00;

LED=~LED;//指示灯反相

}

voidTIM2(void)interrupt5using1//定时器2中断

{

TF2=0;

LED=~LED;//指示灯反相

}

中段

//按键中断程序

#include

main()

{

P1=0x55;//P1口初始值

EA=1;//全局中断开

EX0=1;//外部中断0开

IT0=1;//边沿触发

while

(1)

{

}

}

voidISR_Key(void)interrupt0using1

{

P1=~P1;//s3按下触发一次,P1取反一次

}

实时时钟

#include

#include

sbitSCK=P3^6;

sbitSDA=P3^4;

sbitRST=P3^5;//DS1302复位

bitReadRTC_Flag=1;

unsignedcharl_tmpdate[7]={0,0,12,15,4,3,9};//秒分时日月周年08-05-1512:

00:

00

unsignedcharl_tmpdisplay[8];

codeunsignedcharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//秒分时日月周年最低位读写位

codeunsignedcharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

codeunsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};

//共阴数码管0-9'-''熄灭‘表

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

//显示位码表

voidWrite_Ds1302_byte(unsignedchartemp);

voidWrite_Ds1302(unsignedcharaddress,unsignedchardat);

unsignedcharRead_Ds1302(unsignedcharaddress);

voidRead_RTC(void);//readRTC

voidSet_RTC(void);//setRTC

voidInitTIMER0(void);//initaltimer0

voidmain(void)

{

InitTIMER0();

//Set_RTC();

while

(1){

if(ReadRTC_Flag)

{

ReadRTC_Flag=0;

Read_RTC();

switch(l_tmpdate[0]/5)//设计每个5秒交替显示年月日时分秒

{

case0:

case2:

case4:

case6:

case8:

case10:

l_tmpdisplay[0]=l_tmpdate[2]/16;//数据的转换,因我们采用数码管0~9的显示,将数据分开

l_tmpdisplay[1]=l_tmpdate[2]&0x0f;

l_tmpdisplay[2]=10;//加入"-"

l_tmpdisplay[3]=l_tmpdate[1]/16;

l_tmpdisplay[4]=l_tmpdate[1]&0x0f;

l_tmpdisplay[5]=10;

l_tmpdisplay[6]=l_tmpdate[0]/16;

l_tmpdisplay[7]=l_tmpdate[0]&0x0f;

break;

case1:

case3:

case5:

case7:

case9:

case11:

l_tmpdisplay[0]=l_tmpdate[6]/16;

l_tmpdisplay[1]=l_tmpdate[6]&0x0f;

l_tmpdisplay[2]=10;

l_tmpdisplay[3]=l_tmpdate[4]/16;

l_tmpdisplay[4]=l_tmpdate[4]&0x0f;

l_tmpdisplay[5]=10;

l_tmpdisplay[6]=l_tmpdate[3]/16;

l_tmpdisplay[7]=l_tmpdate[3]&0x0f;

break;

default:

break;

}

}

}

}

voidInitTIMER0(void)

{

TMOD|=0x01;//定时器设置16位

TH0=0xef;//初始化值

TL0=0xf0;

ET0=1;

TR0=1;

EA=1;

}

voidWrite_Ds1302_Byte(unsignedchartemp)

{

unsignedchari;

for(i=0;i<8;i++)//循环8次写入数据

{

SCK=0;

SDA=temp&0x01;//每次传输低字节

temp>>=1;//右移一位

SCK=1;

}

}

/****************************************************************************/

voidWrite_Ds1302(unsignedcharaddress,unsignedchardat)

{

RST=0;

_nop_();

SCK=0;

_nop_();

RST=1;

_nop_();//启动

Write_Ds1302_Byte(address);//发送地址

Write_Ds1302_Byte(dat);//发送数据

RST=0;//恢复

}

/****************************************************************************/

unsignedcharRead_Ds1302(unsignedcharaddress)

{

unsignedchari,temp=0x00;

RST=0;

_nop_();

SCK=0;

_nop_();

RST=1;

_nop_();

Write_Ds1302_Byte(address);

for(i=0;i<8;i++)//循环8次读取数据

{

if(SDA)

temp|=0x80;//每次传输低字节

SCK=0;

temp>>=1;//右移一位

SCK=1;

}

RST=0;

_nop_();//以下为DS1302复位的稳定时间

RST=0;

SCK=0;

_nop_();

SCK=1;

_nop_();

SDA=0;

_nop_();

SDA=1;

_nop_();

return(temp);//返回

}

/****************************************************************************/

voidRead_RTC(void)//读取日历

{

unsignedchari,*p;

p=read_rtc_address;//地址传递

for(i=0;i<7;i++)//分7次读取秒分时日月周年

{

l_tmpdate[i]=Read_Ds1302(*p);

p++;

}

}

/***********************************************************************/

voidSet_RTC(void)//设定日历

{

unsignedchari,*p,tmp;

for(i=0;i<7;i++){//BCD处理

tmp=l_tmpdate[i]/10;

l_tmpdate[i]=l_tmpdate[i]%10;

l_tmpdate[i]=l_tmpdate[i]+tmp*16;

}

Write_Ds1302(0x8E,0X00);

p=write_rtc_address;//传地址

for(i=0;i<7;i++)//7次写入秒分时日月周年

{

Write_Ds1302(*p,l_tmpdate[i]);

p++;

}

Write_Ds1302(0x8E,0x80);

}

voidtim(void)interrupt1using1//中断,用于数码管扫描

{

staticunsignedchari,num;

TH0=0xf5;

TL0=0xe0;

P0=table[l_tmpdisplay[i]];//查表法得到要显示数字的数码段

P2=table1[7-i];

i++;

if(i==8)

{

i=0;

num++;

if(10==num)//隔段时间读取1302的数据。

时间间隔可以调整

{

ReadRTC_Flag=1;//使用标志位判断

num=0;

}

}

}

鸿鸣灯

/*copyright2009,ShenzhenJinChuangElectronicTechnologyco.,Ltd

*

*ThissampleisusedforTimer116bittimermode.

*

*writebyShifang2009-4-23

*

*V1.1

*/

#include

sbitSPK=P1^2;//定义蜂鸣器端口

voiddelay(unsignedintcnt)//延时

{

while(--cnt);

}

main()

{

unsignedinti;

while

(1)

{

for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短

{

delay(80);//参数决定发声的频率,估算值

SPK=!

SPK;

}

SPK=1;//喇叭停止工作,间歇的时间,可更改

delay(20000);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1