单片机C语言程序.docx

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

单片机C语言程序.docx

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

单片机C语言程序.docx

单片机C语言程序

数码管显示采用共阴极结构,其公共端接地。

采用动态显示方式实现0—9数字的显示.

#include

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

unsignedchardispcount;

voiddelay02s(void)

{

unsignedchari,j,k;

for(i=50;i>0;i--)

for(j=50;j>0;j--)

for(k=248;k>0;k--);

}

voidmain()

{

while

(1)

{

for(dispcount=0;dispcount<10;dispcount++)

{

P1=table[dispcount];

delay02s();

}

}

}

实现报警产生器,其中P1_7引脚接一个开关,P1_0输出1kHz和500Hz的音频信号驱动扬声器,作警报信号,要求1kHz信号响100ms,500Hz信号响200ms,

#include

#include

sbitP1_7=P1^0;

sbitP1_0=P1^0;

unsignedcharcount;

voiddely500(void)

{

unsignedchari;

for(i=500;i>0;i--)

{

_nop_();

}

}

voidmain(void)

{

while

(1)

{

if(P1_7==0)

{

for(count=200;count>0;count--)

{

P1_0=~P1_0;

dely500();

}

for(count=200;count>0;count--)

{

P1_0=~P1_0;

dely500();

dely500();

}

}

}

}

采用定时器/计数器工作方式,同时采用中断服务程序来实现闪烁功能.

#include

sbitP1_0=P1^0;

unsignedchari,j;

voiddelay1()

{

for(i=0;i<200;i++)

for(j=0;j<248;j++);

}

voiddelay2()

{

for(i=0;i<240;i++)

for(j=0;j<248;j++);

}

voidmain()

{

TMOD=0x06;

TH0=246;

TL0=246;

IE=0x82;

P1_0=1;

TR0=1;

while

(1);

}

voidtimer0()interrupt1

{

unsignedchark;

for(k=0;k<=5;k++)

{P1_0=0;

delay1();

P1_0=1;

delay2();

}}

独立式键盘电路设计1.

#include

voiddelay10ms(void)

{

unsignedchari,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

voidmain()

{

unsignedcharx;

P1=0xff;

x=1;

while

(1)

{

while(x==1)

{

x=P3;

x=~x;

}

delay10ms();

x=P3;

x=~x;

if(x==1)continue;

switch(x)

{

case0x3e:

P1=0xfe;break;

case0x3d:

P1=0xfd;break;

case0x3c:

P1=0xfb;break;

case0x37:

P1=0xf7;break;

case0x2f:

P1=0xef;break;

case0x1f:

P1=0xdf;break;

default:

break;

}

}

}

独立式键盘电路设计2.

#include

voiddelay10ms(void)

{

unsignedchari,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

voidmain()

{

unsignedcharx;

P3=0xff;

x=1;

while

(1)

{

while(x==1)

{

x=P1;

x=~x;

}

delay10ms();

x=P1;

x=~x;

if(x==1)continue;

switch(x)

{

case0xfe:

P3=0xfe;break;

case0xfd:

P3=0xfd;break;

case0xfb:

P3=0xfb;break;

case0xf7:

P3=0xf7;break;

case0xef:

P3=0xef;break;

case0xdf:

P3=0xdf;break;

case0xbf:

P3=0xbf;break;

case0x7f:

P3=0x7f;break;

default:

break;

}

}

}

多个数码管动态显示程序设计.

\#include

unsignedcharcodeTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

unsignedcharcodeCol[]={0x01,0x02,0x04,0x08,0x10,0x20};

xdataunsignedcharOUTBIT_at_0x8002;

xdataunsignedcharOUTSEG_at_0x8004;

voiddelay()

{

unsignedchari,j,k;

for(i=50;i>0;i--)

for(j=50;j>0;j--)

for(k=248;k>0;k--);

}

voidmain()

{

unsignedcharj;

while

(1)

{

for(j=1;j<7;j++)

{

OUTSEG=Tab[j];

OUTBIT=Col[j-1];

delay();

OUTBIT=0x00;

delay();

}

}

}

霓虹灯控制系统程序设计

#include

unsignedchari10,i8,i6;

unsignedcharmod1,mod2;

bitF;

voidmain(void)

{

i10=10;

i8=8;

i6=6;

mod1=0x01;

mod2=0xAA;

F=0;

TMOD=0x10;

TH1=0x3C;

TL1=0xB0;

IE=0x8A;

TR1=1;

while

(1);

}

voidtimer0()interrupt3using1

{

TH1=0x3C;

TL1=0xB0;

i10--;

if(i10==0)

{

i10=10;

if(F==0)

{

P1=mod1;

mod1=mod1<<1;

i8--;

if(i8==0)

{

i8=8;

F=1;

mod1=0x01;

}

}

else

{

P1=mod2;

mod2=~mod2;

i6--;

if(i6==0)

{

i6=6;

F=0;

}

}

}

}

一键多功能按键识别程序设计

#include

unsignedcharID;

sbitP3_0=P3^0;

sbitP1_3=P1^3;

sbitP1_1=P1^1;

sbitP1_2=P1^2;

sbitP1_0=P1^0;

voiddelay10ms(void)

{

unsignedchari,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

voiddelay02s(void)

{

unsignedchari;

for(i=20;i>0;i--)

{delay10ms();

}

}

voidmain(void)

{while

(1)

{if(P3_0==0)

{delay10ms();

if(P3_0==0)

{

ID++;

if(ID==0)

{

ID=0;

}

while(P3_0==0);}

}

switch(ID)

{case0:

P1=P1|0xfe;

P1_0=~P1_0;

delay02s();

break;

case1:

P1=P1|0xfd;

P1_1=~P1_1;

delay02s();

break;

case2:

P1=P1|0xfb;

P1_2=~P1_2;

delay02s();

break;

case3:

P1=P1|0xf7;

P1_3=~P1_3;

delay02s();

break;

}

}

}

电子时钟.其中包括整点报时,时间调整.

#include

#include

#defineLEDLen6

#definePB12//164时钟位

#definePB01//164数据位

xdataunsignedcharOUTBIT_at_0x8002;//位控制口

xdataunsignedcharOUTSEG_at_0x8004;//段控制口

xdataunsignedcharIN_at_0x8001;//键盘读入口

unsignedcharLEDBuf[LEDLen];//显示缓冲

unsignedcharx,y;

codeunsignedcharLEDMAP[]={//八段管显示码

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

sbitP1_5=P1^5;//整点报时

//延时子程序:

voidDelay(unsignedcharCNT)

{

unsignedchari;

while(CNT--!

=0)

for(i=100;i!

=0;i--);

}

voidDisplayLED()

{

unsignedchari;

unsignedcharPos;

unsignedcharLED;

Pos=0x20;//从左边开始显示

for(i=0;i

OUTBIT=0;//关所有八段管

LED=LEDBuf[i];

OUTSEG=LED;

OUTBIT=Pos;//显示一位八段管

Delay

(1);

Pos>>=1;//显示下一位

}

}

codeunsignedcharKeyTable[]={//键码定义

0x16,0x15,0x14,0xff,

0x13,0x12,0x11,0x10,

0x0d,0x0c,0x0b,0x0a,

0x0e,0x03,0x06,0x09,

0x0f,0x02,0x05,0x08,

0x00,0x01,0x04,0x07

};

unsignedcharTestKey()

{

OUTBIT=0;//输出线置为0

return(~IN&0x0f);//读入键状态(高四位不用)

}

unsignedcharGetKey()

{

unsignedcharPos;

unsignedchari;

unsignedchark;

i=6;

Pos=0x20;//找出键所在列

do{

OUTBIT=~Pos;

Pos>>=1;

k=~IN&0x0f;

}while((--i!

=0)&&(k==0));

//键值=列x4+行

if(k!

=0)

{

i*=4;

if(k&2)

i+=1;

elseif(k&4)

i+=2;

elseif(k&8)

i+=3;

OUTBIT=0;

doDelay(10);while(TestKey());//等键释放

return(KeyTable[i]);//取出键码

}

elsereturn(0xff);

}

//===========================================================

#defineTick10000//10000x100us=1s

#defineT100us(256-50)//100us时间常数(6M)

unsignedcharHour,Minute,Second;

unsignedintC100us;//100us记数单元

//主程序

voidmain()

{

TMOD=0x02;//方式2,定时器

TH0=T100us;

TL0=T100us;

IE=0x82;//EA=1,IT0=1

Hour=0;

Minute=0;

Second=0;

C100us=Tick;

TR0=1;//启动定时器0

while

(1)

{

LEDBuf[0]=LEDMAP[Hour/10];

LEDBuf[1]=LEDMAP[Hour%10]|0x80;

LEDBuf[2]=LEDMAP[Minute/10];

LEDBuf[3]=LEDMAP[Minute%10]|0x80;

LEDBuf[4]=LEDMAP[Second/10];

LEDBuf[5]=LEDMAP[Second%10];

DisplayLED();

if(TestKey())

{x=GetKey();

switch(x)

{

case0x00:

Second=Second+1;if(Second>59)Second=0;

break;

case0x0f:

Minute=Minute+1;if(Minute>59)Minute=0;

break;

case0x0e:

Hour=Hour+1;if(Hour>23)Hour=0;

break;

case0x01:

if(Second==0)Second=59;

Second=Second-1;

break;

case0x02:

if(Minute==0)Minute=59;

Minute=Minute-1;

break;

case0x03:

if(Hour==0)Hour=23;

Hour=Hour-1;

break;

}

}

if((Second==0)&(Minute==0))//整点报时

{

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

{

P1_5=~P1_5;

Delay(100);

P1_5=~P1_5;

Delay(100);}

}

}

}

//中断程序

voidT0Int()interrupt1

{

C100us--;

if(C100us==0){

C100us=Tick;//100us记数器为0,重置记数器

Second++;

if(Second==60){

Second=0;

Minute++;

if(Minute==60)

{

Minute=0;

Hour++;

if(Hour==24)Hour=0;

}

}

}

}

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

当前位置:首页 > 表格模板 > 表格类模板

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

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