内蒙古科技大学微型计算机技术及应用实验程序.docx
- 文档编号:27670030
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:21
- 大小:18.64KB
内蒙古科技大学微型计算机技术及应用实验程序.docx
《内蒙古科技大学微型计算机技术及应用实验程序.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学微型计算机技术及应用实验程序.docx(21页珍藏版)》请在冰豆网上搜索。
内蒙古科技大学微型计算机技术及应用实验程序
微型机计算机技术及应用实验程序
——内蒙古科技大学
实验一基本I/O接口实验
实验内容:
1、P1八位分别连线八只发光二极管;编程实现控制八只发光二级管依次循环点亮,延时1s。
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uintz)
{
uinty;
while(z--)
for(y=0;y<120;y++);
}
voidmain()
{
uchara;
a=0xfe;
P0=a;
while
(1)
{
delay(100);
a=_crol_(a,1);
P0=a;
}
}
实验二P3.3口输入、P1口输出
实验内容:
1、P3口做输入口,外接一开关作为脉冲源,没输入一个脉冲,P1口按十六进制加一。
2、P1口做输出口,编程使P1口接的8个发光二极管L1-L8按十六进制加以方式点亮发光二极管。
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP3_3=P3^3;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchara;
voidmain()
{
a=0x00;
//P1=0xff;
while
(1)
{
if(P3_3==0)
delay(10);
if(P3_3==0)
{
delay(150);
if(P3_3==1)
{
delay(10);
a=a+1;
P1=~a;
}
}
}
}
实验三中断应用实验——工业顺序控制
实验内容:
P1.0~P1.6控制注塑机的七道工序,实现模拟控制七只发光二极管点亮,低电平有效。
设定每道工序转换时间为1秒,P3.4为开启动开关,高电平启动。
P3.3(外部中断1输入口)为故障输入信号,低电平报警。
P1.7为报警声音输出端,产生频率范围在20~2MHz之间的方波信号,经功率放大器(LM386)放大后,驱动喇叭发出报警声。
设定前6道工序只有一位输出,第七道工序有三位(LED6、7、8)输出。
编程实现:
1、打开开工开关后,七道工序循环动作;2、有中断信号输入时,立即停止工序动作(即:
所有灯熄灭)并发出报警声;3、中断去除后,工序恢复到中断来时刻的工序动作。
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharIN_DATA[7]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};
sbitwarm;
sbitbeep=P1^7;
sbitP3_4=P3^4;
init_sys()
{
IT1=0;
EX1=1;
EA=1;
P3=0xff;
}
voidring(intx)
{
inty=x;
warm=1;
beep=0;
for(;y>0;y--);
beep=1;
for(;y>0;y--);
}
voiddelay(uintz)
{
uinty=300;
for(;z>0;z--)
for(;y>0;y--);
}
voidwork(uchar*p)
{
uchara;
uchari;
for(i=0;i<7;i++)
{
a=*p;
P1=a;
p++;
delay(200);
}
}
voidmain()
{
P1=0xff;
init_sys();
while
(1)
{
if(P3_4==1)
{
delay(100);
if(P3_4==1)
work(IN_DATA);
}
if(warm==0)
{
ring(10);
P1=0xff;
}
}
}
voidint1()interrupt2
{
warm=0;
}
实验四八段数码管显示
实验内容:
根据单片机系统LED显示的基本原理,编写程序实现同时在LED上显示任意六个“静态”数字,如“129458”。
要求用查表程序实现。
//四个数码管同时显示118134
#include
#include
#include
#defineled_zxXBYTE[0xffdc]
#defineled_zwXBYTE[0xffdd]
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={0xf9,0xf9,0x80,0xf9,0xb0,0x99};
voiddelay(uintz);
ucharnum;
voidmain()
{
while
(1)
{
uchari;
num=0xfe;
for(i=0;i<6;i++)
{
led_zw=num;
led_zx=table[i];
delay(3);
num=_crol_(num,1);
i++;
}
}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
实验五定时器与中断综合应用实验——秒表
实验内容:
用两位LED作为显示器,实现秒表即时显示功能。
显示效果从“00”计到“59”在反复,每秒显示数字改变一次。
要用定时器在中断方式下实现0.1s计时,然后用程序计数10次实现1S定时。
#defineled_zwXBYTE[0xffdd]
#defineuintunsignedint
#defineucharunsignedchar
voidinit();
voiddelay(uintz);
voiddisplay(ucharbai,ucharshi);
ucharcodetable1[]={
0xc0,0xf9,0xa4,
0xb0,0x99,0x92,
0x83,0xf8,0x80,
0x98};
uintcount,temp,bai,shi;
voidmain()
{
init();
display(bai,shi);//初始化子程序
for(;;);
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
voiddisplay(uintbai,uintshi)
{
uintj=1;
led_zw=j;
led_zx=table1[bai];
delay
(2);
j=j<<1;
led_zw=j;
led_zx=table1[shi];
delay
(2);
}
voidinit()
{
temp=0;
TMOD=1;
TH0=0x3c;//(65535-50000)/256;
TL0=0xb0;//(65535-50000)%256;
IE=0x82;
}
voidtimer0()interrupt1
{
TH0=0x3c;//(65535-50000)/256;
TL0=0xb0;//(65535-50000)%256;
count--;
if(count==0)
{
count=10;
temp++;
if(temp==600)
{
temp=0;
}
bai=temp%1000/100;
shi=temp%1000%100/10;
}
}
实验六串并转换实验
实验内容:
利用8051串行口在方式0时,可通过外接移位寄存器74LS164,扩展一个8位输出通道,用于驱动一个数码管显示,在数码显示器上循环显示8051串行口输出的0-9这十个数字。
#include
#defineucharunsignedchar
ucharcodes[]={0xfc,0x60,0xd0,0xf2,0x66,0x66,0x3e,0xe0,0xfe,0xe6};
uchara,tt,*p;
voidinit();
voidmain()
{
init();
while
(1)
{
if(tt==0)
{
tt=10;
a++;
if(a==10)
a=0;
}
TI=0;
SBUF=s[a];
for(;TI==0;);
}
}
voidinit()
{
TMOD=1;
TR0=1;
IE=0x82;
SCON=0x12;
TH0=0x3c;
TL0=0xb0;
tt=10;
a=0;
}
voidtimer0()interrupt1
{
TL0=0xb0;
TH0=0x3c;
tt--;
}
实验七8255控制交通灯
实验内容:
用8255做输出口,控制十二个发光二极管然灭,模拟交通灯管理。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1东西绿灯通车,南北红灯。
过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。
在转状态3,南北绿灯通车,东西红灯。
过一段时间转状态4,南北绿灯灭,闪烁几次黄灯,延时几秒,东西仍然红灯。
最后循环至状态1.
#include
#include
#defineucharunsignedchar
#defineCON_8255PBYTE[0xffdb]
#definePA_8255PBYTE[0xffd8]
#definePB_8255PBYTE[0xffd9]
#definePC_8255PBYTE[0xffda]
uchartt;
voidinit()
{
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
TR0=1;
IE=0x82;
tt=0;
CON_8255=0x80;//8255A控制口地址
}
voiddisplay1()
{
PA_8255=0x0f;
PB_8255=0xff;
PC_8255=0xff;
}
voiddisplay2()//东西绿灯亮,南北红灯
{
PA_8255=0xcf;
PB_8255=0xff;
PC_8255=0x3f;
}
voiddisplay3()//东西绿灯灭,黄灯闪烁,南北红灯
{
PA_8255=0xcf;
PB_8255=0xf3;
PC_8255=0xff;
}
voiddisplay4()//南北红灯,东西红灯
{PA_8255=0x3f;
PB_8255=0xff;
PC_8255=0xcf;
}
voiddisplay5()//南北绿灯灭,黄灯闪烁,东西红灯
{
PA_8255=0x3f;
PB_8255=0xfc;
PC_8255=0xff;
}
main()
{
init();
while
(1)
{
if(tt==0)display1();
if(tt==10)display2();
if(tt==30)display3();
if(tt==35)PB_8255=0xff;
if(tt==40)PB_8255=0xf3;
if(tt==45)PB_8255=0xff;
if(tt==50)display4();
if(tt==70)display5();
if(tt==75)PB_8255=0xff;
if(tt==80)PB_8255=0xfc;
if(tt==85)PB_8255=0xff;
}
}
voidtimer0()interrupt1
{TL0=0xb0;
TH0=0x3c;
tt++;
if(tt==90)
tt=10;
}
实验八A/D转换实验
实验内容:
利用试验系统上的ADC809做A/D转换器,实验系统上的可调电位器提供模拟量输入,编写程序,将模拟量转换成数字量,在通过数码管显示出来。
要求显示效果为:
LED显示器右边二位显示当前采集的电压值转换后的数字量;调节电位器,LED的内容随着输入电压变化而相应变化;LED以十进制方式显示。
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineled_zxXBYTE[0xffdc]
#defineled_zwXBYTE[0xffdd]
#defineADPBYTE[0xffe0]
#defineCSPBYTE[0xffe0]
ucharrad=0;
Unsignedcharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitEOC=P1^0;
voiddelay(intx)
{
inty=x;
for(;y>0;y--)
for(;x>0;x--);
}
voidread()
{
AD=0;
delay(100);
rad=AD;
}
voidmain()
{
inti,j;
while
(1)
{
read();
j=1;
led_zx=seg[rad%10];
led_zw=j;
delay(6);
j=j<<1;
led_zx=seg[(rad/10)%10];
led_zw=j;
delay(6);
j=j<<1;
led_zx=seg[rad/100];
led_zw=j;
delay(6);
}
}
实验九步进电机控制实验
实验内容:
以P1.0~P1.3作为脉冲信号输出端,键盘输入控制信号,LED显示器输出显示信息。
设计程序分步实现以下功能:
1、设置一开关作为执行键,输入高电平时,电机运转;
2、键盘输入正、反转命令,转速大小设置,转动步数等信息控制电机转动;
3、显示器上实时显示键盘输入的信息以及电机运转是步数变化情况。
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineled_zxXBYTE[0xffdc]
#defineled_zwXBYTE[0xffdd]
sbitA=P1^0;
sbitB=P1^1;
sbitC=P1^2;
sbitD=P1^3;
sbitk2=P2^1;//总开关
ucharM_BS;//总开关的标志0为不运行1为运行
sbitk1=P2^0;//正传反转0为正转1为反转
ucharx;//转速由p1口的高四位控制
uchari;//步距由p2口的高四位控制
ucharcount;//计数
ucharMAR;
uchars[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e};
init_sys()
{if(k2==0)M_BS=0;//当前开关状态
elseM_BS=0;
x=P1&0xf0;
x>>4;//当前速度
count=x;
i=P2&oxf0;
i>>4;//当前步距
MAR=0;
TH0=0x3c;
TL0=0xb0;
TMOD=1;
TR0=1;
IE=0x82;
};
xianshi()
{
led_zx=s[k1];
led_zw=0x20;//显示正转反转
led_zx=s[x];
led_zw=0x10;//显示当前速度
led_zx=s[i];
led_zw=0x08;//显示当前步距
}
yunxing()
{if(k1==0)
{MAR=MAR+i;
MAR%=4;
switch(MAR)
{case0:
{A=0;
B=1;
C=1;
D=1;break;}
case1:
{A=1;
B=0;
C=1;
D=1;break;}
case2:
{A=1;
B=1;
C=0;
D=1;break;}
case3:
{A=1;
B=1;
C=1;
D=0;break;}
}}
else{MAR=MAR-i;
MAR%=4;
switch(MAR)
{case0:
{A=1;
B=1;
C=1;
D=0;break;}
case1:
{A=1;
B=1;
C=0;
D=1;break;}
case2:
{A=1;
B=0;
C=1;
D=1;break;}
case3:
{A=0;
B=1;
C=1;
D=1;break;}
}}
voidmain()
{init_sys();
for(;;)
{xianshi();
If(i==0)
{M_BS=0;}
}
}
voidtimer0()interrupt1
{TH0=0x3c;
TL0=0xb0;
count--;
if(M_BS==0)
{count=2;}
If(count==0)
count=x;
if(M_BS==1)
{yunxing();
i--;
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内蒙古 科技大学 微型计算机 技术 应用 实验 程序