单片机.docx

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

单片机.docx

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

单片机.docx

单片机

流水灯实验代码:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

voiddelayms(uintxms)

{

uinti,j;

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

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

}

voidmain()

{

uinta=0xfe;

while

(1)

{

P1=a;

delayms(1000);

a=_crol_(a,1);

}

}

双向流水灯实验代码:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitkey=P3^2;

voiddelayms(uintxms)

{

uinti,j;

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

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

}

voidmain()

{

uinta=0xfe;

uchari;

while

(1)

{

for(i=1;i<=7;i++)

{

P1=a;

delayms(1000);

a=_crol_(a,1);

}

for(i=1;i<=7;i++)

{

P1=a;

delayms(1000);

a=_cror_(a,1);

}

}

}

日期显示实验代码:

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

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

voiddelayms(uintxms)

{

uinti,j;

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

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

}

voidmain()

{

uchari=0;

uchara=0x11;

while

(1)

{

P1=0x01;

P2=DIS_CODE[2];

delayms(5);

P1=0x02;

P2=DIS_CODE[0];

delayms(5);

P1=0x04;

P2=DIS_CODE[1];

delayms(5);

P1=0x08;

P2=DIS_CODE[6];

delayms(5);

P1=0x10;

P2=DIS_CODE[0];

delayms(5);

P1=0x20;

P2=DIS_CODE[9];

delayms(5);

P1=0x40;

P2=DIS_CODE[1];

delayms(5);

P1=0x80;

P2=DIS_CODE[2];

delayms(5);

}

}

日期显示代码优化

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

仿真实验

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

voiddelayms(uintxms)

{

uinti,j;

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

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

}

voidshow_time(uintyear,uintmonth,uintday)

{

uinttemp;

//显示年份

temp=year/1000;

P1=0x01;

P2=DIS_CODE[temp];

delayms(5);

temp=year%1000;

temp=temp/100;

P1=0x02;

P2=DIS_CODE[temp];

delayms(5);

temp=year%100;

temp=temp/10;

P1=0x04;

P2=DIS_CODE[temp];

delayms(5);

temp=year%10;

P1=0x08;

P2=DIS_CODE[temp];

delayms(5);

//显示月份

temp=month/10;

P1=0x10;

P2=DIS_CODE[temp];

delayms(5);

temp=month%10;排阻知识讲解

P1=0x20;

P2=DIS_CODE[temp];

delayms(5);

//显示日

temp=day/10;

P1=0x40;

P2=DIS_CODE[temp];

delayms(5);

temp=day%10;否

P1=0x80;

P2=DIS_CODE[temp];

delayms(5);是

}

voidmain()

{

while

(1)

{是

show_time(1993,9,16);

}

}

按键控制流水灯实验代码

#include按键消抖流程图

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitkey=P3^2;

voiddelayms(uintxms)

{

uinti,j;

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

for(j=110;j>0;j--);按键控制流水灯实验原理图

}

voidmain()

{

uchari=0;

ucharkey_val=1;

bitbFlash=1;

ucharflag=0xfe;

key=1;

while

(1)

{

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

{

if(key_val!

=key)

{

key_val=key;

if(key==0)

bFlash=~bFlash;

}

if(bFlash)

{

P1=flag;

delayms(100);

flag=_crol_(flag,1);

}

}

}

}

functionaldescription:

按key时,数码管显示数字1且LED1亮,LED2灭;按key1时,数码管显示数字2且LED2亮,LED1灭。

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitkey=P3^2;

sbitkey1=P3^3;

sbitLED1=P1^0;

sbitLED2=P1^1;仿真电路图

ucharcodeDIS_CODE[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x0c};

voiddelayms(uintxms)

{

uinti,j;

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

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

}

voidmain()

{

ucharkey_val=0;

P0=0xff;

P3=0xff;

key_val=0xff;

P0=DIS_CODE[11];

while

(1)

{

if(key_val!

=P3)

{

key_val=P3;

if(key==0)

{

delayms(10);

if(key==0)

{

LED1=0;

LED2=1;

P0=DIS_CODE[1];

}

}

if(key1==0)

{

delayms(10);

if(key1==0)

{

LED1=1;

LED2=0;

P0=DIS_CODE[2];

}

}

}

}

}

如何实现软件“消抖”

外部中断控制实验代码:

外部中断0的响应是让数码管加1,外部中断1的响应是让数码管原先显示的数字清零。

#include

#defineucharunsignedchar

#defineuintunsignedint

uintg_unDisNum;

ucharcodeDIS_CODE[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x0c};

voiddelayms(uintxms)

{

uinti,j;

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

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

}

仿真实验电路图

voiddisp_num(uintnum)

{

ucharsep_num=0;

ucharten_num=0;

ucharhund_num=0;

ucharthou_num=0;

sep_num=num%10;

ten_num=(num%100)/10;

hund_num=(num/100)%10;

thou_num=num/1000;

P2=0x01;

P0=DIS_CODE[thou_num];

delayms(5);

P2=0x02;

P0=DIS_CODE[hund_num];

delayms(5);

P2=0x04;

P0=DIS_CODE[ten_num];

delayms(5);

P2=0x08;

P0=DIS_CODE[sep_num];

delayms(5);

}

voidint0_inter()interrupt0//interruptfunction

{

g_unDisNum++;

}

voidint1_inter()interrupt2

{

g_unDisNum=0;

}

voidmain()

{

g_unDisNum=0;

P0=0xff;

P2=0xff;

P3=0xff;

IT0=1;

IT1=1;

EX0=1;

EX1=1;

EA=1;

while

(1)

{

disp_num(g_unDisNum);

}

}

说明:

在该程序代码中并没有对按键做抖动处理,但是在实际应用中会在中断函数中做一个按键触发的标志,而在主函数中处理按键的抖动问题。

另外中断都是比较紧急的任务,不能在中断处理函数中做太多的工作,特别是不能在中断函数中使用延时函数。

定时器中断实验代码:

外部中断0开启定时器中断,外部中断1关闭定时器中断。

定时时长1s.

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitLED=P2^0;

ucharg_ucNum;

voidint0_inter()interrupt0//starttimer

{

g_ucNum=0;

TH0=0x3c;

TL0=0xb0;

TR0=1;

}

voidint1_inter()interrupt2//closetimer

{

TR0=0;

}

voidtimer0_inter()interrupt1//timer0

{

g_ucNum++;

TH0=0x3c;

TL0=0xb0;

}

voidmain()

{

g_ucNum=0;

P2=0xff;//initial

IT0=1;

IT1=1;//外部中断下降沿触发

EX0=1;

EX1=1;//opentheinterruptexternally

TMOD=0x01;

TH0=0x3c;

TL0=0xb0;

ET0=1;

EA=1;

while

(1)

{

if(g_ucNum>=20)//1s

{

g_ucNum=0;

LED=~LED;

}

}

}

 

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

当前位置:首页 > 求职职场 > 简历

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

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