for(i=0;i<255;i++) {
write_dac(i); }
for(i=255;i>0;i--) {
write_dac(i); } }
void square() //产生方波函数 {
write_dac(0xff);
delay_us(500);
write_dac(0x00);
delay_us(500); }
void sin() //正弦波发生函数 {
uchar i;
for(i=0;i<255;i++)
{
write_dac(sin_a[i]); } }
void step() //阶梯波发生函数 {
write_dac(0xff);
delay_us(500);
write_dac(0xc0);
delay_us(500);
write_dac(0x7f);
delay_us(500);
write_dac(0x3f);
delay_us(500);
write_dac(0x00);
delay_us(500); }
void main(void) {
WDTCTL = WDTPW + WDTHOLD;
uchar s1[] ={\ wave_shaper \
// Stop WDT
uchar s2[] ={\
uchar s3[] ={\
uchar s4[] ={\
BCSCTL1 = CALBC1_12MHZ; //设定CPU时钟DCO频率为12MHz
DCOCTL = CALDCO_12MHZ;
P2DIR |=BIT3+BIT4; //液晶的两条线
P1DIR = 0xff; //0832的数据位
P2DIR |= BIT6+BIT7; //把P26和P27配置为普通IO 并为输出脚 默认为晶振的输入和输出引脚作为dac0832的
P2SEL &= ~(BIT6+BIT7); //cs和wr控制端
P2SEL2 &= ~(BIT6+BIT7);
init_lcd(); //初始化LCD
IO_interrupt_init();
wr_string(0,0,s1); //第一行第一个位置显示s1
wr_string(0,1,s2); //第二行第一个位置显示s2
wr_string(0,2,s3); //第三行第一个位置显示s3
wr_string(0,3,s4); //第四行第一个位置显示s4
wr_int(2,3,key); //显示按键按下次数
wr_string(5,3,s_step);
_EINT(); //enable interrupt
for(;;)
{
if(key==13)
{
sin();
}
else if(key==14)
{
square();
}
else if(key==15)
{
triangular();
}
else if(key==16)
{
saw();
}
else
相关推荐: