单片机.docx
- 文档编号:28607447
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:18
- 大小:107.32KB
单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(18页珍藏版)》请在冰豆网上搜索。
单片机
实验四
一、实验题目:
当K1键按下后,首先使蜂鸣器响一声,然后使LED1-
LED8完成3种闪亮的花样(自己定义),每一种花样循环
3次,然后周而复始。
二、keil代码:
/*当K1键按下后,首先使蜂鸣器响一声,
然后使LED1-LED8完成3种闪亮的花样(自己定义),每一种花样循环3次,然后周而复始。
*/
#include
sbitP2_0=P2^0;//接蜂鸣器
sbitP2_7=P2^7;
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
voidDELAY(inttime)//延时
{
while(time--)
{}
}
voidBUZ_ON()
{
if(P2_7==0)
{
P2_0=1;
}
else
{P2_0=0;
}
}
voidF1(void)
{
inti;
chardata_group_mide[5]={0x00,0x18,0x24,0x42,0x81};//向两边延伸
for(i=0;i<5;i++)
{
P1=data_group_mide[i];
DELAY(20000);
}
P1=0x00;
}
voidF2(void)
{
inti;
chardata_group_left[8]={0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x01,0x00};//向左延伸
for(i=0;i<8;i++)
{
P1=data_group_left[i];
DELAY(20000);
}
P1=0x00;
}
voidF3(void)
{
inti;
chardate_group_right[8]={0x00,0x01,0x03,0x07,0x0f,0x3f,0x7f,0xff};//向右延伸
for(i=0;i<8;i++)
{
P1=date_group_right[i];
DELAY(20000);
}
P1=0x00;
}
voidmain()
{
unsignedinti;//每种花样循环三次
P2_0=0;
P2_7=1;
BUZ_ON();
P1=0x00;
while(P2_7==0)
{
for(i=0;i<3;i++)//花样1
{F1();}
for(i=0;i<3;i++)//花样2
{F2();}
for(i=0;i<3;i++)//花样3
{F3();}
}
}
三、protues电路图:
四、实验截图:
5、实验小结:
通过本次实验,我们熟悉了protues的编译环境,对以后的单片机学习有很大帮助。
实验五
1、实验题目:
程序启动后4位LED显示器滚动显示“-”,每按下1次K1键后,首先使蜂鸣器响一声。
然后,依次使LED滚动显示CNT的计数值(0-9)。
2、Keil代码:
/*程序启动后4位LED显示器滚动显示“-”,每按下才1次K1键后,首先使蜂鸣器响一声。
然后,依次使LED滚动显示CNT的计数值(0-9)。
1、按键K1采用中断来管理。
(INT0采用边沿触发)
2、中断服务程序完成四个功能:
1)消除按键K1抖动。
2)CNT计数。
3)查表将计数值转换成LED显示器的段代码。
4)将段代码分别放入4个显示缓冲单元。
*/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP2_7=P2^7;
sbitP3_3=P3^3;
ucharCORDING[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xf9,0xa4,};//0,1,2,3,4....9,0,1,2的段码
intdelayms(uintt)
{
uintn;
while(--t)
{
n=200;
while(--n);
};
return0;
}
intmain()
{uintCNT=0;
P2_7=0;
P3_3=1;
P1=0xF7;
while
(1)
{
if(P3_3==0)
{uinti;
CNT++;
P2_7=1;
delayms(100);
for(i=1;i<5;i++)
//4位
{P1=CORDING[CNT-1];
switch(i)
{
case1:
P2=0x01;break;//点亮第1位
case2:
P2=0x02;break;//点亮第2位
case3:
P2=0x04;break;//点亮第3位
case4:
P2=0x08;break;//点亮第4位
}
delayms(100);
P2=0x00;//熄灭
}
if(CNT>10)
{
CNT=CNT-10;
}
}
P2_7=0;
}
return0;
}
3、protues电路图:
4、实验截图:
5、实验总结:
通过本次实验,我们熟悉了CNT计数,学会了如何使LED灯上显示0-9数字。
实验六
1、实验题目:
两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,重新计数。
二、keil代码:
/*两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,数码管回归0,
重新计数。
按键K1,K2采用中断来管理。
(INT0采用边沿触发)*/
#defineucharunsignedchar
#defineuintunsignedint
#include
ucharCNT=0;
ucharm=0;
sbitP3_7=P3^7;
sbitP3_2=P3^2;
sbitP0_0=P0^0;
ucharCORDING[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0,1,2,3,4....9的段码
voidDelay(uinta)
{while(--a){};
}
voidintproc()interrupt0
{
TR0=0;
}
voidTime0()interrupt1
{
m++;//中断一次,m加1
if(m==20)
{m=0;//中断次数清零
CNT++;//秒加1
if(CNT==60)
{CNT=0;}
P1=CORDING[CNT/10];//显示十位
Delay(10);
P2=CORDING[CNT%10];//显示个位
Delay(10);
}
}
voidinit()
{
TMOD=0x01;//使用定时器T0使用方式1
TH0=0x3c;
TL0=0xb0;//50ms中断一次
ET0=1;
TR0=1;
EX0=1;
IT0=1;
EA=1;
}
voidmain()
{
P1=0x3f;
P2=0x3f;
P3_7=1;
while
(1)
{
if(P3_7==0)//控制是否开启
{
init();
}
}
}
3、protues电路图:
四、实验截图:
5、实验总结:
本次实验,我们用到了中断,按键K1,K2采用中断来管理。
(INT0采用边沿触发),通过本次实验加强了中断的学习,更加有利于单片机的学习。
实验七
一、实验题目:
晶振12MHz,波特率1200,程序启动后单片机主动发出HelloServer,PC使用串口助手应答单片机,单片机收到数据后,不做任何修改返回PC。
二、keil代码:
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]="HELLOSERVER!
";
uintflag=0;
uchara,b;
voidinit()
{
TMOD=0x20;
TH1=0xFD;
TL1=0XFD;
SCON=0X50;
TR1=1;
EA=1;
ES=1;
}
voidSendByte(ucharch)
{
SBUF=ch;
while(!
TI);
TI=0;
}
voidSendString(ucharcode*str)
{
while(*str)
SendByte(*str++);
}
voidmain()
{
init();
SendString("HELLOSERVER!
");
while
(1)
{
if(flag==1)
{
ES=0;
SBUF=a;
while(!
TI);
TI=0;
ES=1;
flag=0;
}
}
}
voidser()interrupt4
{
if(RI==1)
{
RI=0;
a=SBUF;
flag=1;
}
}
三、protues电路图:
四、实验截图:
五
6、实验总结:
本次实验,我们利用了中断来实现,通过本次实验我们对中断有了更加深刻的了解,让我们在以后的为以后的学习之中打下了一定的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机