好文档 - 专业文书写作范文服务资料分享网站

毕业设计_单片机C语言程序设计实训100例—基于8051+Proteus仿真》

天下 分享 时间: 加入收藏 我要投稿 点赞

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》

#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

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》

sbit K1=P1^7; //发声函数

void Alarm(uchar t) { uchar i,j; for(i=0;i<200;i++) { SPK=~SPK; for(j=0;j

void main() { SPK=0; while(1) { if(K1==1) { Alarm(90); Alarm(120); } } }

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; while(x--) for(t=0;t<120;t++); }

//按周期t发音

22

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》

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

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》

void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG为拍子长度 for(j=0;j

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

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》

{ DSY_Buffer[2]=Count/100; //获取3个数 DSY_Buffer[1]=Count0/10; DSY_Buffer[0]=Count; if(DSY_Buffer[2]==0) //高位为0时不显示 { DSY_Buffer[2]=0x0a; if(DSY_Buffer[1]==0) //高位为0,若第二位为0同样不显示 DSY_Buffer[1]=0x0a; } P0=DSY_CODE[DSY_Buffer[0]]; P1=DSY_CODE[DSY_Buffer[1]]; P2=DSY_CODE[DSY_Buffer[2]]; }

//主程序 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仿真》

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》#include#defineucharunsignedchar#defineuintunsignedint//各数字的数码管段码(共阴)ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4
推荐度:
点击下载文档文档为doc格式
48ht2885aw862m61dlgg
领取福利

微信扫码领取福利

微信扫码分享