单片机.docx

上传人:b****6 文档编号:5256881 上传时间:2022-12-14 格式:DOCX 页数:21 大小:269.89KB
下载 相关 举报
单片机.docx_第1页
第1页 / 共21页
单片机.docx_第2页
第2页 / 共21页
单片机.docx_第3页
第3页 / 共21页
单片机.docx_第4页
第4页 / 共21页
单片机.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机.docx

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

单片机.docx

单片机

实验一驱动数码管

#include

sbitadd=P2^0;

sbitmin=P2^1;

sbitbeg=P2^2;

sbitcs=P2^7;

sbitwor=P3^0;

unsignedchartab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voiddelay(unsignedcharms)

{

unsignedinti,j;

for(i=0;i

{

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

}

}

unsignedcharkey(chari)

{

P2=0xff;

if(add==0)

{

delay(10);

if(add==0)

{

while(add==0);//松手检测

i++;

if(i>9)

i=0;

}

}

if(min==0)

{

delay(10);

if(min==0)

{

while(min==0);

i--;

if(i<0)

i=9;

}

}

returni;

}

voidmain()

{

unsignedchari,j;

j=0;

cs=1;

while

(1)

{

j=key(j);

P0=tab[j];//显示设定的数

if(beg==0)

{

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

{

delay(500);

P0=tab[i];

}

wor=0;

while(add==1&&min==1&&beg==1)

{

P0=tab[j];

delay(100);

cs=~cs;

}

cs=1;

wor=1;

}

}

}

实验二键盘扫描

#include

#defineuintunsignedint

#defineucharunsignedchar

intxx=0;

//sbitkey=P2^0;

charcodeseg[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};

charcodeduan[4]={0x01,0x02,0x04,0x08};

charnum[4]={16,16,16,16};

voiddelay_ms(unsignedcharms)

{

inti;

intj;

for(i=0;i

{for(j=0;j<120;j++);

}

}

unsignedcharkeyscan()

{

ucharn,key,key_r,key_c;

n=20;

P3=0xf0;

key_c=P3;

key_c=key_c&0xf0;

if(key_c!

=0xf0)

{

delay_ms(10);

if(key_c!

=0xf0)

{

key_c=key_c|0x0f;

P3=key_c;

key_r=P3;

key_r=key_r&0x0f;

key_c=key_c&0xf0;

key=key_c+key_r;

}

switch(key)

{

case0xEE:

n=0;break;

case0XDE:

n=1;break;

case0XBE:

n=2;break;

case0X7E:

n=3;break;

case0XED:

n=4;break;

case0XDD:

n=5;break;

case0XBD:

n=6;break;

case0X7D:

n=7;break;

case0XEB:

n=8;break;

case0XDB:

n=9;break;

case0XBB:

n=10;break;

case0X7B:

n=11;break;

case0XE7:

n=12;break;

case0XD7:

n=13;break;

case0XB7:

n=14;break;

case0X77:

n=15;break;

case0x37:

n=16;break;

default:

break;

}

delay_ms(200);

}

returnn;

}

voiddisplay()

{

chari,j;

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

{

P2=duan[i];

j=num[i];

if(j!

=16)

{

P0=seg[j];

delay_ms(10);

}

}

}

voidmain()

{

chari,k;

begain:

P0=seg[0];

P2=0x01;//初始化显示

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

{

num[i]=16;

}

do

{i=keyscan();}

while(i==20);//等待按键

while

(1)

{

if(i!

=20)

{

if(i==16)

{

do

{i=keyscan();}

while(i==16||i==15||i==14);//等待按键松手

gotobegain;//E、F键同时按下进入初始化

}

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

{

num[k]=num[k-1];

}

num[0]=i;

}

display();

i=keyscan();

}

}

实验三中断

#include

sbityell=P2^0;

sbitgree=P2^1;

sbitred=P2^2;

voiddelay(intms)

{

inti,j;

for(i=0;i

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

}voidmain()

{IE=0x85;

IP=0x04;

TCON=0x05;

while

(1)

{

yell=~yell;

delay(200);

}

}

voidintt0()interrupt0

{

chari;

yell=1;

red=0;

gree=1;

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

{

delay(200);

red=~red;

}

red=1;

}

voidintt1()interrupt2

{

chari;

yell=1;

gree=0;

red=1;

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

{

delay(200);

gree=~gree;

}

gree=1;

}

实验四串行口通信

发送

#include

voidmain()

{

TMOD=0X20;//串口工作于方式1,定时器1工作于方式2

TH1=0XFA;

TL1=0XFA;

SCON=0x50;//不倍增,波特率4800

PCON=0;

TR1=1;

while

(1)

{

SBUF=P1;

while(TI==0);

TI=0;

}

}

接收

#include

voidmain()

{

TMOD=0X20;//串口工作于方式1,定时器1工作于方式2

TH1=0XFA;

TL1=0XFA;

SCON=0x50;//不倍增,波特率4800

PCON=0;

TR1=1;

while

(1)

{

P2=SBUF;

while(RI==0);

RI=0;//接受

}

}

实验六步进马达

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeTAB[]=

{

0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09

};

sbitgo=P3^0;

sbitback=P3^1;

sbitfast=P0^2;

sbitslow=P0^3;

sbitstop=P3^4;

ucharN=10;

voidDelay(uintms)

{

uchari;

while(ms--)

{

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

}

}

voidSETP_MOTOR_GO(charN)//正传

{

ucharj;

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

{

if(back==0||stop==0)

break;

P1=TAB[j];

Delay(N);

}

}

voidSETP_MOTOR_BACK(charN)//反转

{

ucharj;

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

{

if(go==0||stop==0)

break;

P1=TAB[j];

Delay(N);

}

}

voidmain()

{

IE=0X85;

TCON=0X05;

P3=0xff;

while

(1)

{

if(go==0)

{

while(back==1&&stop==1)

{

P0=0xfe;

SETP_MOTOR_GO(N);

}

}

else

if(back==0)

{

while(go==1&&stop==1)

{

P0=0xfd;

SETP_MOTOR_BACK(N);

}

}

else

{

P0=0xef;

P1=0x03;

}

}

}

voidintfast()interrupt0//减速程序

{

IE=0;//关中断

N++;

if(N>20)

N=20;

fast=0;

Delay(50);

IE=0X85;//打开中断

}

voidintslow()interrupt2//加速程序

{

IE=0;

N--;

if(N<=1)

N=1;

slow=0;

Delay(50);

IE=0X85;

}

实验七倒计时60

#include

sbitkey=P1^0;

sbitrst=P1^1;

sbitled=P1^7;

charcodeseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedintnum=0,second=60;

voiddelay(unsignedcharms)

{

unsignedchari,j;

for(i=0;i

{

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

}

}

voidmain()

{

begain:

second=60;

IE=0X8A;//开定时器0

TMOD=0X21;//设置为模式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=0;//开始计数

while

(1)

{

if(key==0)

{

TR0=~TR0;//停止开始计数切换

//delay(10);

while(key==0);//等待松手

}

if(rst==0)

{

gotobegain;

}

P2=0x01;

P0=seg[second/10];

delay(20);

P2=0x02;

P0=seg[second%10];

delay(20);//显示

}

}

voidT0_1(void)interrupt1

{

TH0=(65636-50000)/256;

TL0=(65636-50000)%256;//重新赋值

num++;

if(++num==20)

{led=~led;

num=0;

second--;

if(second==0)

{

second=60;

}

}

}

实验八LED动态扫描

#include

codecharright[8]={0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C};

codecharleft[8]={0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18};

codecharup[8]={0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18};

codechardown[8]={0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C};

sbitupkey=P3^0;

sbitdownkey=P3^1;

sbitleftkey=P3^2;

sbitrightkey=P3^3;

voiddelay(charms)

{

chari,j;

for(i=0;i

{

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

}

}

voidrightmove(charms)

{

charx,y,i,j;

x=0x80;

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

{

y=x;

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

{

P2=y;

P1=~right[i];

y=2*y;

delay(10);

}

P1=0xff;

P2=0;

x=x/2;

delay(ms);

}

}

voidleftmove(charms)

{

charx,y,i,j;

x=1;

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

{

y=x;

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

{

P2=y;

P1=~left[i];

y=2*y;

delay(10);

}

P1=0xff;

P2=0;

x=2*x;

delay(ms);

}

}

voidupmove(charms)

{

charx,y,i,j;

x=1;

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

{

y=x;

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

{

P1=~y;

P2=up[i];

y=2*y;

delay(10);

}

P2=0xff;

P2=0;

x=2*x;

delay(ms);

}

}

voiddownmove(charms)

{

charx,y,i,j;

x=0x80;

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

{

y=x;

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

{

P1=~y;

P2=down[i];

y=2*y;

delay(10);

}

P2=0xff;

P2=0;

x=x/2;

delay(ms);

}

}

voidmain()

{

while

(1)

{

if(upkey==0)

{

while(downkey==1&leftkey==1&rightkey==1)

upmove(10);

}

if(downkey==0)

{

while(upkey==1&leftkey==1&rightkey==1)

downmove(10);

}

if(leftkey==0)

{

while(downkey==1&upkey==1&rightkey==1)

leftmove(10);

}

if(rightkey==0)

{

while(downkey==1&leftkey==1&upkey==1)

rightmove(10);

}

}

}

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

当前位置:首页 > 医药卫生 > 基础医学

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

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