单片机实验.docx
《单片机实验.docx》由会员分享,可在线阅读,更多相关《单片机实验.docx(47页珍藏版)》请在冰豆网上搜索。
单片机实验
实验一流水灯
#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