1、程序功能:通过用DAC0832产生三角波。
(DAC0832的数字信号输入端接P0口,/CS 接P2.7,/XFER接地,/WR1、/WR2接单片机的/WR,ILE接电源+5V。
)①DA0832=i; ②for(i=255;i>=0;i--) ③for(i=0;i<=255;i++) ④while(1) ⑤uchar i; ⑥TF1=0; ⑦while(!TF1); ⑧TR1=1;⑨void delay_1ms() ⑩#include<reg51.h>#include<absacc.h>//存放绝对地址宏定义的函数原型#include<reg51.h>﹍﹍﹍﹍﹍#define uchar unsigne d char#define uint unsigned int#define DA0832 XBYTE[0X7FFF]﹍void delay_1ms() ﹍﹍﹍﹍﹍{TH1=0XFC;TL1=0X18;TR1=1;﹍﹍while(!TF1);﹍﹍﹍﹍//等待1ms定时时间到﹍﹍﹍TF1=0;﹍﹍﹍}void main(){ ﹍uchar i;﹍﹍﹍﹍﹍TMOD=0X10;﹍﹍﹍while(1)﹍﹍﹍{ ﹍﹍for(i=0;i<=255;i++) ﹍﹍﹍﹍//形成三角波输出值,逐渐增大,最大为255{ DA0832=i;//D/A转换输出delay_1ms();}﹍﹍for(i=255;i>=0;i--)﹍﹍﹍﹍{ ﹍DA0832=i;﹍﹍﹍﹍﹍;//D/A转换输出delay_1ms();}}}2、程序功能:通过DAC0832产生锯齿波。
(DAC0832的数字信号输入端接P0口,/CS 接P2.7,/XFER接地,/WR1、/WR2接单片机的/WR,ILE接电源+5V。
)选择项:①delay_1ms();②DA0832=i;③for(i=0;i<=255;i++)④TMOD=0X10;⑤void main()⑥TF1=0;⑦while(!TF1) ;⑧TL1=0X18;⑨#define DA0832 XBYTE[0X7FFF]⑩#include<absacc.h>源程序:﹍#include<absacc.h>﹍﹍﹍﹍﹍//存放绝对地址宏定义的函数原型#include<reg51.h>#define uchar unsigned char#define uint un signed int#define DA0832 XBYTE[0X7FFF]﹍﹍﹍﹍﹍﹍void delay_1ms(){ TH1=0XFC;TL1=0X18;﹍﹍﹍﹍TR1=1;﹍while(!TF1) ;﹍﹍﹍﹍﹍﹍TF1=0;﹍﹍﹍﹍﹍}void main()﹍﹍﹍﹍﹍﹍{uchar i;﹍TMOD=0X10;﹍﹍﹍﹍﹍while(1){ for(i=0;i<=255;i++)﹍﹍﹍﹍﹍﹍{ ﹍﹍DA0832=i;﹍﹍﹍﹍//D/A转换输出﹍delay_1ms();﹍﹍﹍﹍﹍}}}3、程序功能:用单片机实现简易数字钟,显示小时、分和秒。
(单片机P2口输出取反后控制8个共阴极数码管的位码,P0口控制每个数码管的段码)选择项:①calc( ); ②display( ); ③if(time[2]>23) ④if(time[1]>59) ⑤if(time[0]>59) ⑥P0=dispcode[time[i]/10]; ⑦P0=dispcode[time[i]%10];⑧for(i=0;i<4;i++) ⑨void delay(void)⑩uchar time[4]={23,59,58,0};源程序:#include "reg51.h " //头文件#define uchar unsigned char//宏定义uchardispcode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //定义共阴数码管0~9显示码数组﹍uchar time[4]={23,59,58,0};﹍﹍﹍﹍﹍//设置时间初值void delay(void) //延时函数{ uchar k;for(k=250;k>0;k--);}void display(void)//显示函数{ uchar i,k;k=0x01; //设置位选线初值﹍for(i=0;i<4;i++)﹍﹍﹍﹍﹍//循环4次{ P2=0; //关闭显示﹍P0=dispcode[time[i]%10]; ﹍﹍﹍﹍﹍//输出个位数的段码P2=k; //送位码k=k<<1;//位码左移一位delay( );//调用延时函数P2=0;//关闭显示﹍P0=dispcode[time[i]/10];﹍﹍﹍﹍﹍//输出十位数的段码P2=k;//送位码k=k<<1;//位码左移一位delay( ); //调用延时函数}P2=0;//关闭显示}void calc(void)//时间值计算函数{ time[0]++;//秒加1﹍if(time[0]>59) ﹍﹍﹍﹍﹍//秒是否超过59{ time[0]=0;//秒清0time[1]++;//分加1﹍if(time[1]>59)﹍﹍﹍﹍﹍//分是否超过59{ time[1]=0;//分清0time[2]++;//小时加1﹍if(time[2]>23)﹍﹍﹍﹍﹍//小时是否超过23time[2]=0;//小时清0}}}﹍﹍﹍void main()﹍﹍﹍//主函数{ uchar i;while(1)//无限循环{ for(i=0;i<250;i++)//循环250次﹍﹍display( );﹍﹍﹍﹍//调用显示函数﹍﹍calc( ); ﹍﹍﹍﹍//调用时间计算函数}}4、程序功能:用单片机控制蜂鸣器播放一首简单的曲子。
利用定时器T1实现声音频率的产生(P1.3引脚接蜂鸣器)。
选择项:①unsigned int code table[3]={64260,64400,64524};②th=(table[n]/256);③unsigned char i,j,k;④for(i=0;i<m;i++) ⑤unsigned char i; ⑥ET1=1; ⑦EA=1;⑧TR1=1; ⑨delay(5); ⑩TH1=th;源程序:#include "reg51.h"//头文件sbit P1_3=P1^3; //定义蜂鸣器输出引脚﹍unsigned int code table[3]={64260,64400,64524}; ﹍﹍﹍//1、2、3三个音的计数值unsigned char th,tl; //定义全局变量void sing(unsigned char n) //音频读取函数{ ﹍﹍th=(table[n]/256);﹍﹍﹍﹍//读取音调计数值高位tl=(table[n]%256); //读取音调计数值低位}void delay(unsigned char m) //延时函数{ ﹍﹍unsigned char i,j,k; ﹍﹍﹍﹍﹍﹍for(i=0;i<m;i++)﹍﹍﹍for(j=0;j<200;j++)for(k=0;k<100;k++);}main()//主函数{ ﹍﹍﹍﹍﹍﹍TMOD=0X10; //定时器工作方式设置﹍﹍﹍ET1=1;﹍﹍﹍//T1中断允许设置﹍﹍EA=1; ﹍﹍﹍﹍//中断总允许设置﹍﹍TR1=1;﹍﹍﹍﹍//启动T1i=0; //设置音频初始值while(1) //无限循环{ sing(i); //调用音频输出函数﹍﹍delay(5);﹍﹍﹍﹍//调用延时函数i++;//指向下一个音if(i>=3) {i=0; delay(10);} //一曲结束,重新开始播放}}void time() interrupt 3//T1中断服务程序{ ﹍﹍TH1=th;﹍﹍﹍﹍//定时器重置初值(高位)TL1=tl; //定时器重置初值(低位)P1_3=~P1_3; //输出取反}5、程序功能:设置八个电子琴键(从P1口接入),能够通过按键发出相应的声音(弹奏)。
利用单片机的定时器T0实现声音频率的产生(P3.3引脚接蜂鸣器)。
选择项:①case 0x7f: ②case 0xfe: ③switch(i) ④while(1) ⑤TCON=0x10; ⑥TMOD=0X01; ⑦main() ⑧P3_3=~P3_3;⑨void INTTO() interrupt 1 ⑩sbit P3_3=P3^3;源程序:#include "reg52.h"//头文件﹍﹍sbit P3_3=P3^3;﹍﹍﹍﹍//定义蜂鸣器输出引脚unsigned char idata i,tl0_temp=0,th0_temp=0;//定义全局变量﹍void INTTO() interrupt 1 ﹍﹍﹍﹍﹍//T0服务程序{ TH0=th0_temp; //定时器重置初值(高位)TL0=tl0_temp; //定时器重置初值(低位)﹍﹍P3_3=~P3_3; ﹍﹍﹍﹍//输出取反}main()﹍﹍﹍﹍﹍﹍//主函数{ P1=0xff;//端口初始化﹍﹍TMOD=0X01; ﹍﹍﹍﹍//定时器工作方式设置ET0=1;//T0中断允许设置EA=1;//中断总允许设置TH0=0;//定时初值高位设置TL0=0;//定时初值低位设置﹍TCON=0x10; ﹍﹍﹍﹍﹍//定时器启动设置﹍﹍while(1) ﹍﹍﹍﹍//无限循环{ i=P1;//读端口值﹍﹍switch(i) ﹍﹍﹍﹍{ case 0xff:TR0=0;break;//无键按下﹍﹍case 0xfe:﹍﹍﹍﹍th0_temp=0xfc;tl0_temp=0x43;TR0=1;break;//1键按下case 0xfd:th0_temp=0xfc;tl0_temp=0xab;TR0=1;break; //2键按下case 0xfb:th0_temp=0xfd;tl0_temp=0x08;TR0=1;break; //3键按下case 0xf7:th0_temp=0xfd;tl0_temp=0x32;TR0=1;break; //4键按下case 0xef:th0_temp=0xfd;tl0_temp=0x81;TR0=1;break; //5键按下case 0xdf:th0_temp=0xfd;tl0_temp=0xc7;TR0=1;break; //6键按下case 0xbf:th0_temp=0xfe;tl0_temp=0x05;TR0=1;break; //7键按下﹍﹍﹍case 0x7f: ﹍﹍﹍th0_temp=0xfe;tl0_temp=0x21;TR0=1;break; //8键按下default:TR0=0;break; //多键按下}}}6、程序功能:单片机控制两个共阳数码管实现计数显示(P0口接段码,P2.0口接十位数码管的位码,P2.1口接个位数码管的位码)。