信号发生器程序Word下载.docx

上传人:b****6 文档编号:21461403 上传时间:2023-01-30 格式:DOCX 页数:22 大小:19.50KB
下载 相关 举报
信号发生器程序Word下载.docx_第1页
第1页 / 共22页
信号发生器程序Word下载.docx_第2页
第2页 / 共22页
信号发生器程序Word下载.docx_第3页
第3页 / 共22页
信号发生器程序Word下载.docx_第4页
第4页 / 共22页
信号发生器程序Word下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

信号发生器程序Word下载.docx

《信号发生器程序Word下载.docx》由会员分享,可在线阅读,更多相关《信号发生器程序Word下载.docx(22页珍藏版)》请在冰豆网上搜索。

信号发生器程序Word下载.docx

#include"

1602.h"

key.h"

tlc5615.h"

menu.h"

wave.h"

main.c--------------------------------------------------------------------------------------

system_inc.h"

unsignedchardot_num;

 

/*****************************************************************************/

voidTIM0_Init(void)

{

TCCR0=0x01;

//00000000

TCNT0=0x00;

OCR0=0x9B;

TIMSK|=(1<

<

1);

//TIM0比较匹配中断使能

//TCCR0|=0x05;

TCCR0&

=~0x07;

}

voidTIM16_Init()

TCCR1A=0x00;

TCCR1B=0x08;

//00001000

TCNT1=0x00;

//OCR1A=0x04F4;

//1KHz15.8750us

4);

//OCIE1A中断使能

//TCCR1B|=0x01;

//00000001

TCCR1B&

intmain()

SetVpp=10;

SetFreq=100;

SetDutyRatio=50;

LCD_init();

//TIM0_Init();

TLC5615_Init();

TIM16_Init();

KEY_Init();

TIM16_WirteOCR(SetFreq,Wave_OutEn);

VppValue_Calcu(SetVpp,Sine_Code);

asm("

sei"

);

TLC5615_WriteData(0);

Wave_SelectMenu(Wave_ID);

while

(1)

{

Wave_BuildRunning();

}

//定时器1比较匹配中断服务程序

#pragmavector=TIMER1_COMPA_vect

__interruptvoidTimer1_Interrupt(void)

dot_num++;

if(dot_num>

63)dot_num=0;

TLC5615_WriteData(Out_DACValue[dot_num]);

1602.c--------------------------------------------------------------------------------------

/*****************************************************************************/#defineBIT(x)(1<

(x))

#definenBIT(x)(0<

//数据寄存器

#defineLCD_Data_PPORTA

#defineLCD_Data_DDDRA

#defineLCD_Data_IPINA

//控制管脚

#defineRS_Bit5

#defineRW_Bit6

#defineEN_Bit7

#defineLCD_EN_PPORTC

#defineLCD_EN_DDDRC

#defineLCD_RS_PPORTC

#defineLCD_RS_DDDRC

#defineLCD_RW_PPORTC

#defineLCD_RW_DDDRC

#defineLCD_EN_Set()LCD_EN_P|=BIT(EN_Bit);

#defineLCD_EN_Reset()LCD_EN_P&

=~BIT(EN_Bit);

#defineLCD_RS_Set()LCD_RS_P|=BIT(RS_Bit);

#defineLCD_RS_Reset()LCD_RS_P&

=~BIT(RS_Bit);

#defineLCD_RW_Set()LCD_RW_P|=BIT(RW_Bit);

#defineLCD_RW_Reset()LCD_RW_P&

=~BIT(RW_Bit);

//液晶操作指令

#definescreen_clear0x01

#definecursor_on0x0e

#definecursor_off0x0c

#definecursor_flash0x0d

#definescreen_moveL0x07

/*****************************************************************************/voiddelay_1ms(void)

unsignedinti;

for(i=0;

i<

1600;

i++);

/*****************************************************************************/voiddelay_nms(unsignedintms)

ms;

i++)delay_1ms();

/*****************************************************************************/voidLCD_busy(void)

LCD_Data_D&

=~BIT(7);

//D7位为输入

LCD_RS_Reset();

//RS=0

LCD_RW_Set();

//RW=1

LCD_EN_Set();

//E=1

nop"

while(LCD_Data_I&

0x80);

//检查DB7是否为0

LCD_EN_Reset();

//E=0

LCD_Data_D|=BIT(7);

//D7位为输出

/*****************************************************************************/voidLCD_write_com(unsignedcharcom,unsignedcharbusy_en)

if(busy_en)LCD_busy();

//是否检查忙信号

//RS=0

LCD_RW_Reset();

//RW=0

//LCD_EN_Reset();

//E=0

//E=1

LCD_Data_P=com;

//写数据

/*****************************************************************************/voidLCD_write_dat(unsignedchardat)

LCD_busy();

//检查忙信号

LCD_RS_Set();

//RS=1

LCD_Data_P=dat;

/*****************************************************************************/voidLCD_init(void)

//端口初始化

LCD_Data_D=0xff;

LCD_EN_D|=BIT(EN_Bit);

LCD_RS_D|=BIT(RS_Bit);

LCD_RW_D|=BIT(RW_Bit);

//液晶初始化

delay_nms(20);

LCD_write_com(0x38,0);

delay_nms(10);

LCD_write_com(0x38,1);

//显示模式设置

LCD_write_com(0x08,1);

//显示关闭

LCD_write_com(0x01,1);

//显示清屏

LCD_write_com(0x06,1);

//显示光标移动设置

LCD_write_com(0x0c,1);

//显示开及光标不显示

LCD_write_com(0x80,1);

//初始化数据指针

/*****************************************************************************/voidLCD_ctrl(unsignedcharcommod)

LCD_write_com(commod,1);

/*****************************************************************************/voidLCD_set_addr(unsignedchary,unsignedcharx)

if(y==1)

LCD_write_com(0x80+x-1,1);

//设置第一行地址指针

elseif(y==2)

LCD_write_com(0x80+0x40+x-1,1);

//设置第二行地址指针

/*****************************************************************************/voidLCD_printchar(unsignedchary,unsignedcharx,unsignedcharword)

//设置显示位置

//打印一个字符

LCD_write_dat(word);

/*****************************************************************************/voidLCD_printstring(unsignedchary,unsignedcharx,unsignedchar*str)

LCD_set_addr(y,x);

//打印数据

while(*str!

='

\0'

LCD_write_dat(*str++);

/*****************************************************************************/voidLCD_printvalue(unsignedchary,unsignedx,unsignedinttmp,unsignedcharlen)

unsignedcharvalue[5];

//分离数据

value[0]=tmp/10000+0x30;

value[1]=tmp%10000/1000+0x30;

value[2]=tmp%1000/100+0x30;

value[3]=tmp%100/10+0x30;

value[4]=tmp%10+0x30;

for(i=(5-len);

5;

i++)

{

LCD_write_dat(value[i]);

voidLCD_ShowData(unsignedchary,unsignedx,unsignedintdata,unsignedchar*string,

unsignedcharcleanlen,unsignedcharflag)

unsignedcharfiLCD_RStplace=0;

//数据首位数值标志,0为0,非0?

cleanlen;

LCD_write_dat(0x20);

if(data==0)

LCD_write_dat(0x30);

else

value[0]=data/10000+0x30;

value[1]=data%10000/1000+0x30;

value[2]=data%1000/100+0x30;

value[3]=data%100/10+0x30;

value[4]=data%10+0x30;

//打印数据

if((data<

10)&

&

(flag==1))

LCD_write_dat(0x2E);

LCD_write_dat(value[4]);

if((value[i]==0x30)&

(fiLCD_RStplace==0))continue;

if(flag)

if(i==3)

fiLCD_RStplace=1;

while(*string!

LCD_write_dat(*string++);

}

1602.h--------------------------------------------------------------------------------------

#ifndef__1602_H

#define__1602_H

voiddelay_1ms(void);

voiddelay_nms(unsignedintms);

voidLCD_busy(void);

voidLCD_write_com(unsignedcharcom,unsignedcharbusy_en);

voidLCD_write_dat(unsignedchardat);

voidLCD_init(void);

voidLCD_ctrl(unsignedcharcommod);

voidLCD_set_addr(unsignedchary,unsignedcharx);

voidLCD_printchar(unsignedchary,unsignedcharx,unsignedcharword);

voidLCD_printstring(unsignedchary,unsignedcharx,unsignedchar*str);

voidLCD_printvalue(unsignedchary,unsignedx,unsignedinttmp,unsignedcharlen);

voidLCD_ShowData(unsignedchary,unsignedx,unsignedintdata,unsignedchar*string,unsignedcharcleanlen,unsignedcharflag);

key.c----------------------------------------------------------------------------------------

#defineKEY_PORTPIND

#defineKEY_DDRDDRD

externvoidKEY_Init()

KEY_DDR&

=~0xBF;

externunsignedcharKEY_Scan(unsignedchar*Cont)

unsignedcharTrg;

unsignedcharReadData=KEY_PORT;

ReadData^=0xff;

Trg=ReadData&

(ReadData^(*Cont));

*Cont=ReadData;

return(unsignedchar)(Trg&

0xBF);

key.h----------------------------------------------------------------------------------------

#ifndef__KEY_H

#define__KEY_H

externvoidKEY_Init();

externunsignedcharKEY_Scan(unsignedchar*Cont);

menu.c-------------------------------------------------------------------------------------

unsignedcharWave_ID=0;

unsignedcharWave_OutEn=0;

unsignedcharSet_Addr[7]={0xC0,0xC2,0xCB,0xCC,0xCD};

unsignedcharParameter_Tmp[7];

voidWave_SelectMenu(unsignedcharWave_ID)

switch(Wave_ID)

caseSINE_WAVE:

LCD_printstring(1,1,"

SINE"

break;

caseTRIA_WAVE:

TRIA"

VppValue_Calcu(SetVpp,Tria_Code);

caseRECT_WAVE:

RECT"

VppValue_Calcu(SetVpp,Rect_Code);

caseSAWT_WAVE:

SAWT"

VppValue_Calcu(SetVpp,Sawt_Code);

//Wave_ReInit(Wave_OutEn);

if(Wave_OutEn)

LCD_printstring(1,6,"

ENABLE"

else

DISENA

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

当前位置:首页 > 工作范文 > 演讲主持

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

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