基于单片机的数字电子钟及波形发生器设计报告.docx
《基于单片机的数字电子钟及波形发生器设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字电子钟及波形发生器设计报告.docx(21页珍藏版)》请在冰点文库上搜索。
基于单片机的数字电子钟及波形发生器设计报告
数字电子钟及波形发生器实验报告
1.设计题目
LED显示器件显示的电子时钟
2.设计要求
要求电子钟有复位功能,整点报时,六只LED数码管显示当前的时分秒,并且具有闹钟功能。
3.所用设备与器材
电子钟有以下几个部件组成:
单片机89c51等,电源,时分秒显示部件。
4.硬件方案
时分秒显示采用动态扫描,以降低对单片机端口数的要求,同时也降低了系统的功耗。
电源部分:
电源部分有两部分组成。
一部分是由220v的市电通过变压,整流稳压来得到+5v电压,维持系统的正常工作。
5.软件方案
该系统的软件方案主要分为主程序和定时器中断程序两大模块。
主程序完成系统的初始化。
中断程序完成时间计数,时间调整,误差消除等功能。
#include//
#defineuintunsignedint
uintflag;
sbitLED=P3^6;//定义LED端口
sbitLED1=P3^7;//定义LED端口
sbitLED2=P0^0;//定义LED端口
sbitkey1=P3^0;//定义按键位置
sbitkey2=P3^1;
//codeunsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0-9
codeunsignedchartab[]={0xc0,0xf9,0xA4,0xB0,0x99,//0-4
0x92,0x82,0xf8,0x80,0x90//5-9
};
unsignedcharh_shiwei;//定义十位
unsignedcharh_gewei;//定义个位
unsignedcharm_shiwei;//定义十位
unsignedcharm_gewei;//定义个位
unsignedchars_shiwei;//定义十位
unsignedchars_gewei;//定义个位
unsignedcharcolck_h_shiwei;//定义十位
unsignedcharcolck_h_gewei;//定义个位
unsignedcharcolck_m_shiwei;//定义十位
unsignedcharcolck_m_gewei;//定义个位
unsignedcharcolck_s_shiwei;//定义十位
unsignedcharcolck_s_gewei;//定义个位
unsignedcharhour=0,minute=0,second=0,count=0,AA=0,zd_flag,zd_count;
unsignedcharcolck_hour=0,colck_minute=0,colck_second=0,colck_flag,colck_count;
voiddelayms(unsignedintdelay)//1ms延时函数
{
unsignedinti,x;
for(x=0;x{for(i=0;i<100;i++);}}voiddelay(unsignedintcnt){while(--cnt);}voidInit_shumaguan(void){h_shiwei=tab[0];h_gewei=tab[0];m_shiwei=tab[0];m_gewei=tab[0];s_shiwei=tab[0];s_gewei=tab[0];colck_h_shiwei=tab[0];colck_h_gewei=tab[0];colck_m_shiwei=tab[0];colck_m_gewei=tab[0];colck_s_shiwei=tab[0];colck_s_gewei=tab[0];}voidInit_Timer1(void){TMOD|=0x10;//使用模式1,16位定时器TH1=(65535-50000)/256;//给定初值TL1=(65535-50000)%256;EA=1;//总中断打开EX0=1;//外部中断0开IT0=1;//电平触发EX1=1;//外部中断1开IT1=1;//电平触发ET1=1;//定时器中断打开TR1=1;//定时器开关打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer1();Init_shumaguan();LED1=0;LED=0;second=30;while(1){if(flag==2){P2=0x01;P1=colck_h_shiwei;//显示秒十位delay(300);//短暂延时P2=0x02;P1=colck_h_gewei;//显示秒个位delay(300);P2=0x08;P1=colck_m_shiwei;//显示秒十位delay(300);//短暂延时P2=0x10;P1=colck_m_gewei;//显示秒个位delay(300);P2=0x40;P1=s_shiwei;//显示秒十位delay(300);//短暂延时P2=0x80;P1=s_gewei;//显示秒个位delay(300);}else{P2=0x01;P1=h_shiwei;//显示秒十位delay(300);//短暂延时P2=0x02;P1=h_gewei;//显示秒个位delay(300);P2=0x08;P1=m_shiwei;//显示秒十位delay(300);//短暂延时P2=0x10;P1=m_gewei;//显示秒个位delay(300);P2=0x40;P1=s_shiwei;//显示秒十位delay(300);//短暂延时P2=0x80;P1=s_gewei;//显示秒个位delay(300);}if(!key1){delayms(1);if(!key1){while(!key1);if(flag==1){minute++;if(minute==60){minute=0;}m_shiwei=tab[minute/10];//十位显示值处理m_gewei=tab[minute%10];//个位显示处理}if(flag==2){colck_minute++;if(colck_minute==60){colck_minute=0;}colck_m_shiwei=tab[colck_minute/10];//十位显示值处理colck_m_gewei=tab[colck_minute%10];//个位显示处理}}}if(!key2){delayms(1);//去抖动if(!key2)//检测按键确实按下,进行按键处理{while(!key2);if(flag==1){hour++;if(hour==24){hour=0;}h_shiwei=tab[hour/10];//十位显示值处理h_gewei=tab[hour%10];//个位显示处理}if(flag==2){colck_hour++;if(colck_hour==24){colck_hour=0;}colck_h_shiwei=tab[colck_hour/10];//十位显示值处理colck_h_gewei=tab[colck_hour%10];//个位显示处理}}}}}/*------------------------------------------------*名称:Time0_Int()*功能:定时器中断------------------------------------------------*/voidTimer1_Int(void)interrupt3using1{TH1=(65535-50000)/256;//给定初值,这里使用定时器最大值从0开始计数一直到65535溢出TL1=(65535-50000)%256;//LED=~LED;//指示灯反相,可以看到闪烁count++;if(count==20){second++;if(zd_flag==1){zd_count++;LED=1;if(zd_count>5){LED=0;zd_count=0;zd_flag=0;}}if(colck_flag==1){colck_count++;LED1=1;if(colck_count>15){LED1=0;colck_count=0;colck_flag=0;}}count=0;}if(second==60){minute++;second=0;if(minute==60){zd_flag=1;hour++;minute=0;if(hour==24){hour=0;}h_shiwei=tab[hour/10];//十位显示值处理h_gewei=tab[hour%10];//个位显示处理}if(minute==colck_minute&&hour==colck_hour){colck_flag=1;}m_shiwei=tab[minute/10];//十位显示值处理m_gewei=tab[minute%10];//个位显示处理}s_shiwei=tab[second/10];//十位显示值处理s_gewei=tab[second%10];//个位显示处理}/*------------------------------------------------*名称:中断函数*功能:------------------------------------------------*/voidISR_Key(void)interrupt0using1//调时调分{AA=~AA;TR1=AA;//定时器开关打开if(AA==0){flag=1;//LED1=1;}else{flag=0;//LED1=0;}}/*------------------------------------------------*名称:中断函数*功能:naoling------------------------------------------------*/voidISR_Key2(void)interrupt2{AA=~AA;TR1=AA;//定时器开关打开if(AA==0){flag=2;//LED=1;}else{flag=0;//LED=0;}}}6.方案论证P1口对应赋值的四个switch按键,由上到下分别控制秒分时,复位和闹钟。P2口对应显示位显示,,P0口对应显示段显示,abcdefg每个代表一段。还有晶振电路,蜂鸣器电路。中断程序采用单片机内部T0实现,定时时间为125ms,当时间到达125乘以8,即1秒时,秒计数缓冲器增加1,到达一分钟时,分计数缓冲器加1,到达一小时时,时计数缓冲器增加1,并将秒分时的个位十位百位放入显示缓冲器。当秒分时计数缓冲器分别到达60sec60min24h时,则对他们清零,以便重新计数。7.调试过程8.运行结果及收获体会电子钟有复位功能,整点报时,六只LED数码管显示当前的时分秒,并且具有闹钟功能。通过这次设计是我认识到我对单片机方面知识的匮乏,对于书本上的很多知识不能熟练应用,有很多知识需要自己去掌握,等待自己去认真学习,我会在以后的学习生活中弥补我所缺少的知识。本次试验使我学到了一些重要的东西,理论到实践的转化,怎样将自己学到的东西用到以后的工作中去。在大学课堂的学习仅仅只是被灌输了专业知识,而对与实践却是少之又少,此次电子钟设计给自己奠定了实践基础,我会在以后的学习生活中磨练自己,使自己适应于以后的竞争。 波形发生器的设计1.设计题目设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。2.设计要求利用单片机P1.0引脚输出频率范围1HZ~1000HZ的正弦波方波、三角波、梯形波、锯齿波并用示波器观察。3.所用设备与器材DAC0832、89C51、OPAMP、button、GROUND、示波器、电源。4.硬件方案采用单片机和数模转换DAC0832实现波形产生,波形的产生是通过AT89C51执行波形程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路输出端得到相关电压波形。以AT89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P2口接button。5.软件方案DAC0832采用单缓冲方式。#include#include#defineucharunsignedchar#defineuintunsignedint#defineDAC0832_AdrXBYTE[0x7FFF]charcodesindat[]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xel,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};bitflag=0;voiddelay(uintN){uinti;for(i=0;i}voidDAC0832_ConversionOnce(ucharout_data){DAC0832_Adr=out_data;delay(10);}ucharKey_Scan(void){ucharkey;if(P2!=0xff){delay(10);key=P2;if(key!=0xff)flag=~flag;return(key);}elsereturn(key=0xff);}voidFun_Triangle(void){uchari;for(i=0;i<255;i++)DAC0832_ConversionOnce(i);for(;i>0;i--)DAC0832_ConversionOnce(i);}voidFun_Rectangular(void){DAC0832_ConversionOnce(0xff);delay(1000);DAC0832_ConversionOnce(0x00);delay(1000);}voidFun_SawTooth(void){uchari;for(i=0;i<255;i++)DAC0832_ConversionOnce(i);}voidFun_Sin(void){uchari;for(i=0;i<255;i++){DAC0832_ConversionOnce(sindat[i]);}}voidmain(){ucharKey_Num;while(1){Key_Num=Key_Scan();switch(Key_Num){case0xfe:do{Fun_Triangle();}while(Key_Scan()&&(flag==1));break;case0xfd:do{Fun_SawTooth();}while(Key_Scan()&&(flag==1));break;case0xfb:do{Fun_Rectangular();}while(Key_Scan()&&(flag==1));break;case0xf7:do{Fun_Sin();}while(Key_Scan()&&(flag==1));break;default:break;}}}6.方案论证采用AT89C51单片机作为控制器,波形选择通过按键选择,波形通过DAC0832。这样设计占用单片机端口少,具有电路简单,设计方便,显示亮度高,可靠性高等特点。7.调试过程按下P2.0按下P2.1按下P2.2按下P2.39.运行结果及收获体会实现了利用AT89C51单片机输出正弦波、矩形波、三角波、锯齿波。通过对波形发生器的设计,是我收获很多,虽然实验结果不完美,但是这次设计真正是自己长进很多,是我更加深一步的了解了单片机系统的软硬件设计过程,方法及实现,培养了我分析问题解决问题的能力,为以后的设计和实现更难的设计打下良好基础。要设计一个成功的电路,必须要有耐心,要有坚持的毅力,同时还要有较强的查阅资料的能力,我希望在以后的实践和工作中能在这些方面得到更大更好的提升。
for(i=0;i<100;i++);
}
voiddelay(unsignedintcnt)
while(--cnt);
voidInit_shumaguan(void)
h_shiwei=tab[0];
h_gewei=tab[0];
m_shiwei=tab[0];
m_gewei=tab[0];
s_shiwei=tab[0];
s_gewei=tab[0];
colck_h_shiwei=tab[0];
colck_h_gewei=tab[0];
colck_m_shiwei=tab[0];
colck_m_gewei=tab[0];
colck_s_shiwei=tab[0];
colck_s_gewei=tab[0];
voidInit_Timer1(void)
TMOD|=0x10;//使用模式1,16位定时器
TH1=(65535-50000)/256;//给定初值TL1=(65535-50000)%256;
EA=1;//总中断打开
EX0=1;//外部中断0开
IT0=1;//电平触发
EX1=1;//外部中断1开
IT1=1;//电平触发
ET1=1;//定时器中断打开
TR1=1;//定时器开关打开
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
Init_Timer1();
Init_shumaguan();
LED1=0;
LED=0;
second=30;
while
(1)
if(flag==2)
P2=0x01;
P1=colck_h_shiwei;//显示秒十位
delay(300);//短暂延时
P2=0x02;
P1=colck_h_gewei;//显示秒个位
delay(300);
P2=0x08;
P1=colck_m_shiwei;//显示秒十位
P2=0x10;
P1=colck_m_gewei;//显示秒个位
P2=0x40;
P1=s_shiwei;//显示秒十位
P2=0x80;
P1=s_gewei;//显示秒个位
else
P1=h_shiwei;//显示秒十位
P1=h_gewei;//显示秒个位
P1=m_shiwei;//显示秒十位
P1=m_gewei;//显示秒个位
if(!
key1)
delayms
(1);
while(!
key1);
if(flag==1)
{minute++;
if(minute==60)
minute=0;
m_shiwei=tab[minute/10];//十位显示值处理
m_gewei=tab[minute%10];//个位显示处理
{colck_minute++;
if(colck_minute==60)
colck_minute=0;
colck_m_shiwei=tab[colck_minute/10];//十位显示值处理
colck_m_gewei=tab[colck_minute%10];//个位显示处理
key2)
(1);//去抖动
key2)//检测按键确实按下,进行按键处理
key2);
hour++;
if(hour==24)
hour=0;
h_shiwei=tab[hour/10];//十位显示值处理
h_gewei=tab[hour%10];//个位显示处理
colck_hour++;
if(colck_hour==24)
colck_hour=0;
colck_h_shiwei=tab[colck_hour/10];//十位显示值处理
colck_h_gewei=tab[colck_hour%10];//个位显示处理
*名称:
Time0_Int()
*功能:
定时器中断
voidTimer1_Int(void)interrupt3using1
TH1=(65535-50000)/256;//给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL1=(65535-50000)%256;
//LED=~LED;//指示灯反相,可以看到闪烁
count++;
if(count==20)
second++;
if(zd_flag==1)
zd_count++;
LED=1;
if(zd_count>5)
zd_count=0;
zd_flag=0;
if(colck_flag==1)
colck_count++;
LED1=1;
if(colck_count>15)
colck_count=0;
colck_flag=0;
count=0;
if(second==60)
minute++;
second=0;
zd_flag=1;
if(minute==colck_minute&&hour==colck_hour)
colck_flag=1;
s_shiwei=tab[second/10];//十位显示值处理
s_gewei=tab[second%10];//个位显示处理
中断函数
voidISR_Key(void)interrupt0using1//调时调分
AA=~AA;
TR1=AA;//定时器开关打开
if(AA==0)
flag=1;
//LED1=1;
flag=0;
//LED1=0;
naoling
voidISR_Key2(void)interrupt2
flag=2;
//LED=1;
//LED=0;
6.方案论证
P1口对应赋值的四个switch按键,由上到下分别控制秒分时,复位和闹钟。
P2口对应显示位显示,,P0口对应显示段显示,abcdefg每个代表一段。
还有晶振电路,蜂鸣器电路。
中断程序采用单片机内部T0实现,定时时间为125ms,当时间到达125乘以8,即1秒时,秒计数缓冲器增加1,到达一分钟时,分计数缓冲器加1,到达一小时时,时计数缓冲器增加1,并将秒分时的个位十位百位放入显示缓冲器。
当秒分时计数缓冲器分别到达60sec60min24h时,则对他们清零,以便重新计数。
7.调试过程
8.运行结果及收获体会
电子钟有复位功能,整点报时,六只LED数码管显示当前的时分秒,并且具有闹钟功能。
通过这次设计是我认识到我对单片机方面知识的匮乏,对于书本上的很多知识不能熟练应用,有很多知识需要自己去掌握,等待自己去认真学习,我会在以后的学习生活中弥补我所缺少的知识。
本次试验使我学到了一些重要的东西,理论到实践的转化,怎样将自己学到的东西用到以后的工作中去。
在大学课堂的学习仅仅只是被灌输了专业知识,而对与实践却是少之又少,此次电子钟设计给自己奠定了实践基础,我会在以后的学习生活中磨练自己,使自己适应于以后的竞争。
波形发生器的设计
设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。
利用单片机P1.0引脚输出频率范围1HZ~1000HZ的正弦波方波、三角波、梯形波、锯齿波并用示波器观察。
DAC0832、89C51、OPAMP、button、GROUND、示波器、电源。
采用单片机和数模转换DAC0832实现波形产生,波形的产生是通过AT89C51执行波形程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路输出端得到相关电压波形。
以AT89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P2口接button。
DAC0832采用单缓冲方式。
#include
#defineucharunsignedchar
#defineDAC0832_AdrXBYTE[0x7FFF]
charcodesindat[]={
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,
0xab,0xae,0xb1,0xb4,0xb7,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,
0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xel,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,
0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,
0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
0xf4,0xf3,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,
0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,
0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,
0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,
0x66,0x63,0x60,0x5d,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,
0x40,0x3d,0x3a,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,
0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,
0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,
0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,
0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,
0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};
bitflag=0;
voiddelay(uintN)
uinti;
for(i=0;i}voidDAC0832_ConversionOnce(ucharout_data){DAC0832_Adr=out_data;delay(10);}ucharKey_Scan(void){ucharkey;if(P2!=0xff){delay(10);key=P2;if(key!=0xff)flag=~flag;return(key);}elsereturn(key=0xff);}voidFun_Triangle(void){uchari;for(i=0;i<255;i++)DAC0832_ConversionOnce(i);for(;i>0;i--)DAC0832_ConversionOnce(i);}voidFun_Rectangular(void){DAC0832_ConversionOnce(0xff);delay(1000);DAC0832_ConversionOnce(0x00);delay(1000);}voidFun_SawTooth(void){uchari;for(i=0;i<255;i++)DAC0832_ConversionOnce(i);}voidFun_Sin(void){uchari;for(i=0;i<255;i++){DAC0832_ConversionOnce(sindat[i]);}}voidmain(){ucharKey_Num;while(1){Key_Num=Key_Scan();switch(Key_Num){case0xfe:do{Fun_Triangle();}while(Key_Scan()&&(flag==1));break;case0xfd:do{Fun_SawTooth();}while(Key_Scan()&&(flag==1));break;case0xfb:do{Fun_Rectangular();}while(Key_Scan()&&(flag==1));break;case0xf7:do{Fun_Sin();}while(Key_Scan()&&(flag==1));break;default:break;}}}6.方案论证采用AT89C51单片机作为控制器,波形选择通过按键选择,波形通过DAC0832。这样设计占用单片机端口少,具有电路简单,设计方便,显示亮度高,可靠性高等特点。7.调试过程按下P2.0按下P2.1按下P2.2按下P2.39.运行结果及收获体会实现了利用AT89C51单片机输出正弦波、矩形波、三角波、锯齿波。通过对波形发生器的设计,是我收获很多,虽然实验结果不完美,但是这次设计真正是自己长进很多,是我更加深一步的了解了单片机系统的软硬件设计过程,方法及实现,培养了我分析问题解决问题的能力,为以后的设计和实现更难的设计打下良好基础。要设计一个成功的电路,必须要有耐心,要有坚持的毅力,同时还要有较强的查阅资料的能力,我希望在以后的实践和工作中能在这些方面得到更大更好的提升。
voidDAC0832_ConversionOnce(ucharout_data)
DAC0832_Adr=out_data;
delay(10);
ucharKey_Scan(void)
ucharkey;
if(P2!
=0xff)
key=P2;
if(key!
flag=~flag;
return(key);
elsereturn(key=0xff);
voidFun_Triangle(void)
uchari;
for(i=0;i<255;i++)
DAC0832_ConversionOnce(i);
for(;i>0;i--)
voidFun_Rectangular(void)
DAC0832_ConversionOnce(0xff);
delay(1000);
DAC0832_ConversionOnce(0x00);
voidFun_SawTooth(void)
voidFun_Sin(void)
DAC0832_ConversionOnce(sindat[i]);
voidmain()
ucharKey_Num;
Key_Num=Key_Scan();
switch(Key_Num)
case0xfe:
do{
Fun_Triangle();
}while(Key_Scan()&&(flag==1));break;
case0xfd:
Fun_SawTooth();
case0xfb:
Fun_Rectangular();
case0xf7:
Fun_Sin();
default:
break;
采用AT89C51单片机作为控制器,波形选择通过按键选择,波形通过DAC0832。
这样设计占用单片机端口少,具有电路简单,设计方便,显示亮度高,可靠性高等特点。
按下P2.0
按下P2.1
按下P2.2
按下P2.3
9.运行结果及收获体会
实现了利用AT89C51单片机输出正弦波、矩形波、三角波、锯齿波。
通过对波形发生器的设计,是我收获很多,虽然实验结果不完美,但是这次设计真正是自己长进很多,是我更加深一步的了解了单片机系统的软硬件设计过程,方法及实现,培养了我分析问题解决问题的能力,为以后的设计和实现更难的设计打下良好基础。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力,同时还要有较强的查阅资料的能力,我希望在以后的实践和工作中能在这些方面得到更大更好的提升。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2