单片机实验.docx

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

单片机实验.docx

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

单片机实验.docx

单片机实验

实验一流水灯

#include

#defineucharunsignedchar

#defineuintunsignedint

voiddelay(uintx)

{

uinti,j;

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

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

}

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

voidmain()

{

uchari;

P1=0xff;

while

(1)

{

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

{

P1=tab[i];

delay(500);

}

}}

实验二数码管

#include

#defineduanxuanP1//宏定义段选为P1端口

unsignedcharcodetable1[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f};

unsignedchari;

voiddelay(unsignedintk)

{

unsignedintm,n;

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

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

}

voidmain()

{

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

{

duanxuan=table1[i];

delay(1000);

}

}

实验三电脑时钟

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineled_outP0

#defineweiP1

ucharS=58,M=58,H=23;

ucharcount=0;

uintduantab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39};

voiddelay(uinttime)

{

inti,j;

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

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

}

voiddisplay()

{

wei=0xfe;

led_out=duantab[H/10];

delay(5);

wei=0xfd;

led_out=duantab[H%10];

delay(5);

wei=0xfb;

led_out=0x40;

delay(5);

wei=0xf7;

led_out=duantab[M/10];

delay(5);

wei=0xef;

led_out=duantab[M%10];

delay(5);

wei=0xdf;

led_out=0x40;

delay(5);

wei=0xbf;

led_out=duantab[S/10];

delay(5);

wei=0x7f;

led_out=duantab[S%10];

delay(5);

}

voidmain()

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

TMOD=0x01;

TR0=1;

ET0=1;

EA=1;

while

(1)

{display();}

}

voidtimer0()interrupt1

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

count++;

if(count==100)

{

count=0;

S++;

if(S==60)

{

S=0;

M++;

if(M==60)

{

M=0;

H++;

}

if(H==24)

H=0;

}

}

}

实验四工业控制

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitled1=P2^0;

sbitled2=P2^1;

sbitled3=P2^2;

sbitled4=P2^3;

sbitled5=P2^4;

sbitled6=P2^5;

sbitled7=P2^6;

sbitk5=P3^7;

sbitk3=P3^2;

sbits=P1^5;

uchartemp;

voiddelay(uinttime)

{

uinti,j;

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

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

}

voidmain()

{

IT0=0;

EX0=1;

EA=1;

P2=0Xff;

while

(1)

{if(k5==1)

{led1=0;

delay(200);

led1=1;

led2=0;

delay(200);

led2=1;

led3=0;

delay(200);

led3=1;

led4=0;

delay(200);

led4=1;

led5=0;

delay(200);

led5=1;

led6=0;

delay(200);

led6=1;

led7=0;

delay(200);

led7=1;}

if(k5==0)P2=0xff;

}

}

voidint1()interrupt0

{

s=0;

P2=0xff;

while(!

k3);

s=1;

实验五8255交通灯

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#definePAXBYTE[0x7fff]

//#definePORTBXBYTE[0x7fff]

#defineconXBYTE[0x7FFF]//设置寄存器地址

sbitC1=P1^1;

sbitC0=P1^0;

uchari;

//unsignedcharcodetable1[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

//unsignedcharcodetable2[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};

unsignedchari;

voiddelay(unsignedintk)

{

unsignedintm,n;

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

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

}

voidmain()

{con=0x80;//工作方式控制字PA方式0输出,PB方式0输出,PC髙四位输出,低四位输出

C1=0;

C0=0;

PA=0XFF;

while

(1)

{

PA=0x0c;

delay(10000);

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

{

PA=0x08;

delay(500);

PA=0x0a;

delay(500);

}

PA=0x21;

delay(10000);

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

{

PA=0x11;

delay(500);

PA=0x01;

delay(500);

}

}

}

交通灯

#include

#defineuintunsignedint

#defineucharunsignedchar

//0123456789

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

ucharaa,ge,shi;

sbitdongxi_red=P2^0;//定义东西红灯

sbitdongxi_yellow=P2^1;//定义东西黄灯

sbitdongxi_green=P2^2;//定义东西绿灯

uchartemp;

sbitnanbei_red=P2^5;//定义南北红灯

sbitnanbei_yelow=P2^6;//定义南北黄灯

sbitnanbei_green=P2^7;//定义南北绿灯

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

voiddelay(uintz);//函数声明部分

voiddisplay1();

voidinit_clock();

voidzhuangtai1();

voidzhuangtai2();

voidzhuangtai3();

voidzhuangtai4();

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

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

//主函数部分

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

voidmain()

{

init_clock();//初始化定时器与中断

while

(1)

{

zhuangtai1();//第一个状态:

东西绿灯亮,南北红灯亮30秒倒计时

zhuangtai2();//第二个状态:

东西黄灯闪,南北红灯亮5秒倒计时

zhuangtai3();//第三个状态,东西红灯亮,南北绿灯亮30秒倒计时

zhuangtai4();//第四个状态,东西红灯亮,南北黄灯闪5秒倒计时

}

}

voiddelay(uintz)//延时函数

{

uintx,y;

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

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

}

voidzhuangtai1()//第一个状态:

东西绿灯亮,南北红灯亮30秒倒计时

{

temp=10;//变量赋初值

while

(1)

{

dongxi_red=0;//东西红灯灭

nanbei_red=1;//南北红灯亮

dongxi_green=1;//东西绿灯亮

nanbei_green=0;//南北绿灯灭

dongxi_yellow=0;//东西黄灯灭

nanbei_yelow=0;//南北黄灯灭

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自减

if(temp==-1)//temp从30减到0

{

temp=30;//变量重赋初值

break;//跳出while语句

}

}

display1();//显示秒表倒计时30-0

}

}

voidzhuangtai2()//第二个状态:

东西黄灯闪,南北红灯亮5秒倒计时

{

temp=5;//变量赋初值

while

(1)

{

dongxi_red=0;//东西红灯灭

nanbei_red=1;//南北红灯亮

dongxi_green=0;//东西绿灯灭

nanbei_green=0;//南北绿灯灭

nanbei_yelow=0;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自减

dongxi_yellow=~dongxi_yellow;//将黄灯取反使它在五秒内闪三次

if(temp==-1)//temp从5减到0

{

temp=6;//变量重新赋值

break;//跳出while语句

}

}

display1();//显示秒表倒计时5-0

}

}

voidzhuangtai3()//第三个状态,东西红灯亮,南北绿灯亮30秒倒计时

{

temp=10;//变量赋初值

while

(1)

{

dongxi_red=1;//东西红灯灭

nanbei_red=0;//南北红灯亮

dongxi_green=0;//东西绿灯亮

nanbei_green=1;//南北绿灯灭

dongxi_yellow=0;//东西黄灯灭

nanbei_yelow=0;//南北黄灯亮

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自减

if(temp==-1)//temp从30减到0

{

temp=30;//变量清0

break;//跳出while语句

}

}

display1();//显示秒表倒计时30-0

}

}

voidzhuangtai4()//第四个状态,东西红灯亮,南北黄灯闪5秒倒计时

{

temp=5;//变量赋初值

while

(1)

{

dongxi_red=1;//东西红灯灭

nanbei_red=0;//南北红灯亮

dongxi_green=0;//东西绿灯亮

nanbei_green=0;//南北绿灯灭

dongxi_yellow=0;

if(aa==20)//定时20*50MS=1S

{

aa=0;//定时完成一次后清0

temp--;//变量自减

nanbei_yelow=~nanbei_yelow;

if(temp==-1)//temp从5减到0

{

temp=6;//变量清0

break;//跳出while语句

}

}

display1();//显示秒表倒计时30-0

}

}

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

//显示时间

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

voiddisplay1()

{

P1=0xfd;

P0=table[temp/10];

delay(5);

P1=0xfe;

P0=table[temp%10];

delay(5);

P1=0x7f;

P0=table[temp/10];

delay(5);

P1=0xbf;

P0=table[temp%10];

delay(5);

}

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

//初始化定时器与中断

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

voidinit_clock(void)

{

TMOD=0x01;//设置定时器0为工作方式M1M0=01是16位定时器/计数器

TH0=0x3c;//定时器/计数器0的高八位赋初值

TL0=0xb0;//定时器/计数器0的低八位赋初值

//以上两行设置定时时间为50ms,以后只需改动50000的数值即可

EA=1;//打开总中断

ET0=1;//定时器/计数器0的中断打开,允许定时器/计数器0申请中断

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

}

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

//中断服务子程序

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

voidtimer0()interrupt1

{

TH0=0x3c;

TL0=0xb0;

aa++;

}

实验六键盘控制

#include

#defineuintunsignedint

#defineucharunsignedchar

#definekeypadP2

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39};//段码表示

ucharnum;//数码管显示的数字

voiddelay(uintz)

{

uintx,y;

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

for(y=110;y>0;y--);//经典延时程序

}

voidkeyscan();//键盘扫描声明

voiddisplay();

voidmain()

{

while

(1)

{

keyscan();

display();

}

}

//显示子程序

voiddisplay()

{

P1=0xfe;

P0=table[num/10];//显示两位数字十位

delay(5);

P1=0xfd;//位选标志

P0=table[num%10];//显示各位

delay(5);

}

//按键扫描

voidkeyscan()

{

uchartemp,temp_h;

keypad=0xf0;

temp=keypad;

temp_h=temp&0xf0;//取高四位

keypad=0x0f;

temp=keypad;

temp=keypad&0x0f;//取低四位

temp=temp|temp_h;

switch(temp)

{

case0xff:

break;

case0xee:

num=1;

break;

case0xde:

num=2;

break;

case0xbe:

num=3;

break;

case0x7e:

num=4;

break;

case0xed:

num=5;

break;

case0xdd:

num=6;

break;

case0xbd:

num=7;

break;

case0x7d:

num=8;

break;

case0xeb:

num=9;

break;

case0xdb:

num=10;

break;

case0xbb:

num=11;

break;

case0x7b:

num=12;

break;

case0xe7:

num=13;

break;

case0xd7:

num=14;

break;

case0xb7:

num=15;

break;

case0x77:

num=16;

break;

}

实验七led点阵

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitst_cp=P3^5;//接输出存储器锁存时钟线12号管脚

sbitsh_cp=P3^6;//接数据输入时钟线11号管脚

sbitds_data=P3^4;//接数据线14号管脚

//OE使能端一直接地

sbitkey=P3^7;

unsignedcharcodezi[][32]=//汉字编码阜阳师范学院OK!

{

{0x00,0x08,0x00,0x08,0x00,0x08,0x3F,0x0E8,0x2A,0x48,0x2A,0x48,0x6A,0x48,0xAA,0x7F,

0x2A,0x48,0x2A,0x48,0x2A,0x48,0x7B,0x0C8,0x20,0x08,0x00,0x18,0x00,0x08,0x00,0x00

},//阜

{0x00,0x00,0x7F,0xFF,0x40,0x10,0x44,0x08,

0x5B,0x10,0x60,0xE0,0x00,0x00,0x7F,0x0FF,

0x41,0x02,0x41,0x02,0x41,0x02,0x41,0x02,

0x41,0x02,0xFF,0xFF,0x40,0x00,0x00,0x00

},//阳

{0x00,0x00,0x3F,0xF1,0x00,0x02,0x00,0x0C,

0xFF,0xF0,0x00,0x00,0x40,0x00,0x4F,0xFC,

0x48,0x00,0x48,0x00,0x7F,0xFF,0x48,0x08,

0x48,0x04,0xDF,0xF8,0x48,0x00,0x00,0x00

},//师

{0x20,0x20,0x22,0x20,0x29,0xBF,0x24,0x20,

0xF6,0x40,0x20,0x00,0x27,0x0FC,0x24,0x02,

0x24,0x02,0x24,0x42,0xF4,0x22,0x2F,0xC2,

0x24,0x02,0x60,0x02,0x20,0x0E,0x00,0x00

},//范

/*{0x02,0x0C,0x88,0x69,0x09,0x09,0x89,0x69,

0x09,0x09,0x19,0x28,0xC8,0x0A,0x0C,0x00,

0x20,0x20,0x20,0x20,0x20,0x22,0x21,0x7E,

0x60,0xA0,0x20,0x20,0x20,0x60,0x20,0x00

},//学

{0x00,0x7F,0x44,0x5A,0x69,0x30,0x24,0x24,

0xA4,0x64,0x24,0x2C,0x25,0x28,0x30,0x00,

0x00,0xFF,0

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

当前位置:首页 > 高中教育 > 语文

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

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