单片机C语言程序设计实训100例—基于8051+Proteus仿真(5)

2019-04-13 23:07

#include

#define uchar unsigned char #define uint unsigned int

//各数字的数码管段码(共阴)

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示缓冲

uchar DSY_Buffer[3]={0,0,0}; //延时

void DelayMS(uint ms) {

uchar t; while(ms--)for(t=0;t<120;t++); }

//主程序 void main() { }

uchar i,m,Num; P0=0xff; P2=0xff; while(1) { }

m=0xfe;

Num=P1; //读取拨码开关的值 DSY_Buffer[0]=Num/100;

DSY_Buffer[1]=Num/10; DSY_Buffer[2]=Num;

for(i=0;i<3;i++) //刷新显示在数码管上 { }

m=_crol_(m,1);

P2=m;

P0=DSY_CODE[DSY_Buffer[i]]; DelayMS(10);

21 开关控制报警器

/* 名称:开关控制报警器 说明:用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果 */

#include #define uchar unsigned char #define uint unsigned int sbit SPK=P1^0;

21

sbit K1=P1^7; //发声函数 void Alarm(uchar t) {

uchar i,j;

for(i=0;i<200;i++) { }

SPK=~SPK; for(j=0;j

//由参数t行成不同的频率

}

void main() { }

22 按键发音

/* 名称:按键发音 说明:按下不同的按键会是SOUNDER发出不同频率的声音。本例使用延时函数实现不同频率的声音输出,以后也可使用定时器 */

#include

#define uchar unsigned char #define uint unsigned int sbit BEEP=P3^7; sbit K1=P1^4; sbit K2=P1^5; sbit K3=P1^6; sbit K4=P1^7; //延时

void DelayMS(uint x) {

uchar t; SPK=0; while(1) { }

if(K1==1) { }

Alarm(90); Alarm(120);

while(x--) for(t=0;t<120;t++); }

//按周期t发音

22

void Play(uchar t) { uchar i;

for(i=0;i<100;i++) { BEEP=~BEEP; DelayMS(t);

} BEEP=0;

}

void main() { P1=0xff; BEEP=0; while(1) { if(K1==0) Play(1); if(K2==0) Play(2); if(K3==0) Play(3); if(K4==0)

Play(4);

}

}

23 播放音乐

/* 名称:播放音乐 说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时实现 */

#include

#define uchar unsigned char #define uint unsigned int sbit BEEP=P3^7;

//生日快乐歌的音符频率表,不同频率由不同的延时来决定

uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; //生日快乐歌节拍表,节拍决定每个音符的演奏长短

uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,

9,3,12,12,12,12,12,9,3,12,12,12,24,0};

//延时

void DelayMS(uint x) {

uchar t;

while(x--) for(t=0;t<120;t++); }

//播放函数

23

void PlayMusic() { }

uint i=0,j,k;

while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG为拍子长度 }

for(j=0;j

BEEP=~BEEP;

//SONG_TONE延时表决定了每个音符的频率 for(k=0;k

}

DelayMS(10); i++;

void main()

{ }

BEEP=0; while(1) { }

PlayMusic(); //播放生日快乐

DelayMS(500); //播放完后暂停一段时间

24 INT0中断计数

/* 名称:INT0中断计数 说明:每次按下计数键时触发INT0中断,中断程序累加计数, 计数值显示在3只数码管上,按下清零键时数码管清零 */

#include #define uchar unsigned char #define uint unsigned int //0~9的段码

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //计数值分解后各个待显示的数位 uchar DSY_Buffer[]={0,0,0}; uchar Count=0; sbit Clear_Key=P3^6; //数码管上显示计数值 void Show_Count_ON_DSY()

24

{

DSY_Buffer[2]=Count/100; //获取3个数 DSY_Buffer[1]=Count0/10; DSY_Buffer[0]=Count;

if(DSY_Buffer[2]==0) //高位为0时不显示 { }

P0=DSY_CODE[DSY_Buffer[0]]; P1=DSY_CODE[DSY_Buffer[1]]; P2=DSY_CODE[DSY_Buffer[2]];

DSY_Buffer[2]=0x0a;

if(DSY_Buffer[1]==0) //高位为0,若第二位为0同样不显示

DSY_Buffer[1]=0x0a;

}

//主程序 void main() {

P0=0x00; P1=0x00;

P2=0x00;

IE=0x81; //允许INT0中断 IT0=1; //下降沿触发

while(1) { if(Clear_Key==0) Count=0; //清0

Show_Count_ON_DSY(); } }

//INT0中断函数

void EX_INT0() interrupt 0 { Count++; //计数值递增 }

25 外部INT0中断控制LED

/* 名称:外部INT0中断控制LED

说明:每次按键都会触发INT0中断,中断发生时将LED状态取反,产生LED状态由按键控制的效果 */

#include #define uchar unsigned char #define uint unsigned int sbit LED=P0^0;

25


单片机C语言程序设计实训100例—基于8051+Proteus仿真(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湘教版小学六年级美术下册全册教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: