初学单片机.docx

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

初学单片机.docx

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

初学单片机.docx

初学单片机

单片机89C52之八灯闪烁程序(初学)笨办法--十二种变化

2010-04-2223:

52

#include

sbita0=P1^0;

sbita1=P1^2;

sbita2=P1^4;

sbita3=P1^6;

sbita4=P1^1;

sbita5=P1^3;

sbita6=P1^5;

sbita7=P1^7;

#defineN15

voiddelay(inttime)

{

intx,y;

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

{for(y=1150;y>0;y--);

}

}

//延时程序0.01秒

voidmain()

{

inti,j,j0,j1,j2,j3,j4,j5;

intb0,b1,b2,b3,c0,c1,c2,c3;

while

(1)

{

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

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

{

a0=0;delay(N);a0=1;

a1=0;delay(N);a1=1;

a2=0;delay(N);a2=1;

a3=0;delay(N);a3=1;

a4=0;delay(N);a4=1;

a5=0;delay(N);a5=1;

a6=0;delay(N);a6=1;

a7=0;delay(N);a7=1;

}

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

//--------------------------------------------------------------顺时针跑马灯

for(j0=0;j0<4;j0++)

{

a7=0;delay(N);a7=1;

a6=0;delay(N);a6=1;

a5=0;delay(N);a5=1;

a4=0;delay(N);a4=1;

a3=0;delay(N);a3=1;

a2=0;delay(N);a2=1;

a1=0;delay(N);a1=1;

a0=0;delay(N);a0=1;

}

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

//-------------------------------------------------------逆时针跑马灯

for(j1=0;j1<4;j1++)

{

a0=0;delay(N);a0=1;

a2=0;delay(N);a2=1;

a4=0;delay(N);a4=1;

a6=0;delay(N);a6=1;

a1=0;delay(N);a1=1;

a3=0;delay(N);a3=1;

a5=0;delay(N);a5=1;

a7=0;delay(N);a7=1;

}

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

//----------------------------------------------------------奇偶排列

for(j2=0;j2<4;j2++)

{

a0=0;delay(N);

a1=0;delay(N);

a2=0;delay(N);

a3=0;delay(N);

a4=0;delay(N);

a5=0;delay(N);

a6=0;delay(N);

a7=0;delay(N);

a7=1;delay(N);

a6=1;delay(N);

a5=1;delay(N);

a4=1;delay(N);

a3=1;delay(N);

a2=1;delay(N);

a1=1;delay(N);

a0=1;delay(N);

}

//-------------------------------------------------顺时针灯亮逆时针灯灭

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

for(j3=0;j3<4;j3++)

{

a0=0;a1=0;delay(N);a0=1;a1=1;

a2=0;a3=0;delay(N);a2=1;a3=1;

a4=0;a5=0;delay(N);a4=1;a5=1;

a6=0;a7=0;delay(N);a6=1;a7=1;

//-----------------------------------------------------------顺时针双跑马灯

a7=0;a6=0;delay(N);a7=1;a6=1;

a5=0;a4=0;delay(N);a5=1;a4=1;

a3=0;a2=0;delay(N);a3=1;a2=1;

a1=0;a0=0;delay(N);a1=1;a0=1;

//----------------------------------------------------------逆时针双跑马灯

a0=0;a4=0;delay(N);a0=1;a4=1;

a1=0;a5=0;delay(N);a1=1;a5=1;

a2=0;a6=0;delay(N);a2=1;a6=1;

a3=0;a7=0;delay(N);a3=1;a7=1;

//---------------------------------------------------------顺时针双灯跑马灯

a7=0;a3=0;delay(N);a7=1;a3=1;

a6=0;a2=0;delay(N);a6=1;a2=1;

a5=0;a1=0;delay(N);a5=1;a1=1;

a4=0;a0=0;delay(N);a4=1;a0=1;

}

//------------------------------------------------------逆时针双灯跑马灯

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

for(j4=0;j4<4;j4++)

{

a3=0;a4=0;delay(N);a3=1;a4=1;

a2=0;a5=0;delay(N);a2=1;a5=1;

a1=0;a6=0;delay(N);a1=1;a6=1;

a0=0;a7=0;delay(N);a0=1;a7=1;

//-------------------------------------------------------从中间到两边

a0=0;a7=0;delay(N);a0=1;a7=1;

a1=0;a6=0;delay(N);a1=1;a6=1;

a2=0;a5=0;delay(N);a2=1;a5=1;

a3=0;a4=0;delay(N);a3=1;a4=1;

//-----------------------------------------------------从两边到中间

}

for(j5=0;j5<4;j5++)

{

a3=0;a4=0;delay(N);

a2=0;a5=0;delay(N);

a1=0;a6=0;delay(N);

a0=0;a7=0;delay(N);

//------------------------------------------------------从中间到两边顺序灯

a0=0;a7=0;delay(N);

a1=0;a6=0;delay(N);

a2=0;a5=0;delay(N);

a3=0;a4=0;delay(N);

}

//-----------------------------------------------从两边到中间顺序灯

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

{

//---------------------------------------------------开始

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;//亮

delay(N);

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;//灭

delay(N);

//--------------------------------------------------------------结束

}

for(b0=1,b1=1000;b0<850,b1>0;b0++,b1--)

{

b2=b0;

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;

while(b2>0)

{b2--;}

b3=b1;

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;

while(b3>0)

{b3--;}

}

for(c0=1,c1=1000;c0<850,c1>0;c0++,c1--)

{

c3=c1;

a0=1;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;

while(c3>0)

{c3--;}

c2=c0;

a0=0;a1=0;a2=0;a3=0;a4=0;a5=0;a6=0;a7=0;

while(c2>0)

{c2--;}

}

//-----------------------------------------------------调光4秒

}

}

C51单片机初学第十二课

2009-10-2919:

21

第21课按键音试验

你的手机里应该有这个选项,按键时发出嘀的一声,这时为了让用户知道按键已经生效的提示。

我们今天也在我们的试验板上做这个试验,按下K1,就发出短暂的嘀声。

――――――――――――――――――――

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

#include//包括一个52标准内核的头文件

charcodedx516[3]_at_0x003b;//这是为了仿真设置的

sbitP10=P1^0;//LED1

sbitK1=P3^2;

sbitK2=P3^5;

sbitK3=P2^4;

sbitK4=P2^5;

sbitBEEP=P1^7;//喇叭输出脚

bi(ulongt)

{

ulongc;

uintn;

for(c=0;c

{

for(n=0;n<50;n++);//延时

BEEP=~BEEP;//取反输出到喇叭的信号

}

}

//按键音试验

voidmain(void)//主程序

{

uintn;

while

(1)

{

if(!

K1)

{

bi(100);//发出按键音

while(!

K1);//等键松开

for(n=0;n<2000;n++);//键去抖  

}

}

}

―――――――――――――――――――――

第22课音阶声音输出试验

这一课,我们不再输出简单嘀声了,而是要输出各种不同频率的音乐声。

先输出基本的音阶,12345671。

为了输出准确的音阶频率,我们需要用定时器输出来控制蜂鸣器的驱动,这里用的T0。

我们再每一次定时器中断溢出时取反P17引脚,以形成频率驱动蜂鸣器,定时器0工作在16位方式,需要在中断里重新置入初始值。

这个值就决定了P17输出的频率。

我们在程序里先做好了一张表,预先写好了每个音阶的频率需要设置的初始值。

到时调入对应的值进去T0,不断溢出时就P17可以输出对应的频率。

在这个程序里,我们自动地输出8个音符,每个音符保持1秒钟左右。

―――――――――――――――――――――――

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

#include//包括一个52标准内核的头文件

charcodedx516[3]_at_0x003b;//这是为了仿真设置的

sbitBEEP=P1^7;//喇叭输出脚

ucharth0_f;//在中断中装载的T0的值高8位

uchartl0_f;//在中断中装载的T0的值低8位

//T0的值,及输出频率对照表

ucharcodefreq[36*2]={

0xA9,0xEF,//00220HZ,1//0

0x93,0xF0,//00233HZ,1#

0x73,0xF1,//00247HZ,2

0x49,0xF2,//00262HZ,2#

0x07,0xF3,//00277HZ,3

0xC8,0xF3,//00294HZ,4

0x73,0xF4,//00311HZ,4#

0x1E,0xF5,//00330HZ,5

0xB6,0xF5,//00349HZ,5#

0x4C,0xF6,//00370HZ,6

0xD7,0xF6,//00392HZ,6#

0x5A,0xF7,//00415HZ,7

0xD8,0xF7,//00440HZ1//12

0x4D,0xF8,//00466HZ1#//13

0xBD,0xF8,//00494HZ2//14

0x24,0xF9,//00523HZ2#//15

0x87,0xF9,//00554HZ3//16

0xE4,0xF9,//00587HZ4//17

0x3D,0xFA,//00622HZ4#//18

0x90,0xFA,//00659HZ5//19

0xDE,0xFA,//00698HZ5#//20

0x29,0xFB,//00740HZ6//21

0x6F,0xFB,//00784HZ6#//22

0xB1,0xFB,//00831HZ7//23

0xEF,0xFB,//00880HZ`1

0x2A,0xFC,//00932HZ`1#

0x62,0xFC,//00988HZ`2

0x95,0xFC,//01046HZ`2#

0xC7,0xFC,//01109HZ`3

0xF6,0xFC,//01175HZ`4

0x22,0xFD,//01244HZ`4#

0x4B,0xFD,//01318HZ`5

0x73,0xFD,//01397HZ`5#

0x98,0xFD,//01480HZ`6

0xBB,0xFD,//01568HZ`6#

0xDC,0xFD,//01661HZ`7//35

};

//定时中断0,用于产生唱歌频率

timer0()interrupt1

{

TL0=tl0_f;TH0=th0_f;//调入预定时值

BEEP=~BEEP;//取反音乐输出IO

P2=~P2;

}

//音阶声音自动输出试验

voidmain(void)//主程序

{

ulongn;

uchari;

ucharcodejie8[8]={12,14,16,17,19,21,23,24};//1234567`1八个音符在频率表中的位置

TMOD=0x01;//使用定时器0的16位工作模式

TR0=1;

ET0=1;

EA=1;

while

(1)

{

for(i=0;i<8;i++)//循环播放8个音符

{  

tl0_f=freq[jie8*2];//置一个音符的值

th0_f=freq[jie8*2+1];

for(n=0;n<50000;n++);//延时1秒左右

}

}

}

―――――――――――――――――――――――――――――――

请编译,运行。

可以听到8个音符不断循环输出。

第23课按键控制音阶声音输出(电子琴)

        上次我们实现了通过蜂鸣器自动输出7个音符的试验,这一课我们用按键控制音符的输出,4个按键输出4个音符,效果就和电子琴的按键一样。

        由于平时不能发声,只有按键后才发声,我们用定时器的启动TR0作为声音输出开关。

在发现按键后,送入对应频率值,打开定时器,就发出了声音,延时一阵,再关闭定时器,声音就停止了。

――――――――――――――――――――

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

#include//包括一个52标准内核的头文件

charcodedx516[3]_at_0x003b;//这是为了仿真设置的

sbitBEEP=P1^7;//喇叭输出脚

sbitK1=P3^2;

sbitK2=P3^5;

sbitK3=P2^4;

sbitK4=P2^5;

ucharth0_f;//在中断中装载的T0的值高8位

uchartl0_f;//在中断中装载的T0的值低8位

//T0的值,及输出频率对照表

ucharcodefreq[36*2]={

0xA9,0xEF,//00220HZ,1//0

0x93,0xF0,//00233HZ,1#

0x73,0xF1,//00247HZ,2

0x49,0xF2,//00262HZ,2#

0x07,0xF3,//00277HZ,3

0xC8,0xF3,//00294HZ,4

0x73,0xF4,//00311HZ,4#

0x1E,0xF5,//00330HZ,5

0xB6,0xF5,//00349HZ,5#

0x4C,0xF6,//00370HZ,6

0xD7,0xF6,//00392HZ,6#

0x5A,0xF7,//00415HZ,7

0xD8,0xF7,//00440HZ1//12

0x4D,0xF8,//00466HZ1#//13

0xBD,0xF8,//00494HZ2//14

0x24,0xF9,//00523HZ2#//15

0x87,0xF9,//00554HZ3//16

0xE4,0xF9,//00587HZ4//17

0x3D,0xFA,//00622HZ4#//18

0x90,0xFA,//00659HZ5//19

0xDE,0xFA,//00698HZ5#//20

0x29,0xFB,//00740HZ6//21

0x6F,0xFB,//00784HZ6#//22

0xB1,0xFB,//00831HZ7//23

0xEF,0xFB,//00880HZ`1

0x2A,0xFC,//00932HZ`1#

0x62,0xFC,//00988HZ`2

0x95,0xFC,//01046HZ`2#

0xC7,0xFC,//01109HZ`3

0xF6,0xFC,//01175HZ`4

0x22,0xFD,//01244HZ`4#

0x4B,0xFD,//01318HZ`5

0x73,0xFD,//01397HZ`5#

0x98,0xFD,//01480HZ`6

0xBB,0xFD,//01568HZ`6#

0xDC,0xFD,//01661HZ`7//35

};

//定时中断0,用于产生唱歌频率

timer0()interrupt1

{

TL0=tl0_f;TH0=th0_f;//调入预定时值

BEEP=~BEEP;//取反音乐输出IO

}

//按键控制音阶声音输出(电子琴)

voidmain(void)//主程序

{

ulongn;

ucharcodejie8[8]={12,14,16,17,19,21,23,24};//1234567`1八个音符在频率表中的位置

TMOD=0x01;//使用定时

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

当前位置:首页 > 表格模板 > 调查报告

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

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