微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 麻烦哪位大神帮我看一下下面的程序,我把就错误改了又会多出来新错误

麻烦哪位大神帮我看一下下面的程序,我把就错误改了又会多出来新错误

时间:10-02 整理:3721RD 点击:

麻烦哪位大神帮我改一下,谢谢


#include<iom16v.h>

#include<macros.h>

#define uchar unsigned char

#define uint unsigned char

#include"LM016LCD_drive.h"

#include"MAX6675_drive.h"

#include"DS1302_drive.h"

#include"PWM.h"

#define beep_0 (PORTD=PORTD&0X7F)

#define beep_1 (PORTD=PORTD|0X81)

#define fosc 11059200

#define baud 9600

uchar count_10ms;

uchar K1_FLAG=1;

uchar tempt;

uchar SEED;

uchar K1=0;

uchar P=0;

//uchar K=0;

uchar line1_data[]={"week"};

//uchar line3_data[]={"Time"};

//uchar line2_data[]={"    "};

uchar disp_buf[15]={0x00};

uchar time_buf[7]={0,0,0x12,0,0,0,0,};

uchar temp[2]={0};

//uchar TEMP1[]={0};

/*蜂鸣器响一声函数*/

void beep(uchar L)

{

beep_0;

Delay_ms(L);

beep_1;

Delay_ms(L);

}

/*端口设置函数*/

void port_init(void)

{

PORTA=0xff;

DDRA=0XFF;

DDRB=(1<<PB0)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB6)|(1<<PB7);       

PORTC=0XFF;

DDRC=0XFF;

DDRD=(0<<PD2)|(0<<PD3)|(0<<PD4)|(0<<PD5)|(0<<PD6)|(1<<PD7);

PORTD=0Xff;

}

/*转换函数,负责将走时数据转换为适合lcd显示的数据*/

void LCD_conv(uchar inl,uchar in2,uchar in3,uchar in4,uchar in5,uchar in6,uchar in7)

{

disp_buf[0]=inl/10+0x30;

disp_buf[1]=inl%10+0x30;

disp_buf[2]=in2/10+0x30;

disp_buf[3]=in2%10+0x30;

disp_buf[4]=in3/10+0x30;

disp_buf[5]=in3%10+0x30;

disp_buf[6]=in4/10+0x30;

disp_buf[7]=in4%10+0x30;

disp_buf[8]=in5/10+0x30;

disp_buf[9]=in5%10+0x30;

disp_buf[10]=in6+0x30;//

disp_buf[11]=2+0x30;

disp_buf[12]=0x30;

disp_buf[13]=in7%100/10+0x30;

disp_buf[14]=in7%10+0x30;

}

void temp_disp(void)

{

uint i;

LocateXY(11,1);

for(i=1;i<4;i++)

{

lcd_wdat(show_data);

delay(1);

}

LocateXY(14,1);

lcd_wdat(0xdf);

lcd_wdat(0x43);

}

/*lcd显示函数*/

void LCD_disp()

{

uchar i;

//LocateXY(10,0);

//lcd_wdat(0x3a);

LocateXY(0,0);

lcd_wdat(disp_buf[11]);

lcd_wdat(disp_buf[12]);

lcd_wdat(disp_buf[13]);

lcd_wdat(disp_buf[14]);

lcd_wdat(0x2f);

lcd_wdat(disp_buf[8]);

lcd_wdat(disp_buf[9]);

lcd_wdat(0x2f);

lcd_wdat(disp_buf[6]);

lcd_wdat(disp_buf[7]);

LocateXY(15,0);

lcd_wdat(disp_buf[10]);

LocateXY(0,1);

lcd_wdat(disp_buf[4]);

lcd_wdat(disp_buf[5]);

lcd_wdat(0x3a);

lcd_wdat(disp_buf[2]);

lcd_wdat(disp_buf[3]);

lcd_wdat(0x3a);

lcd_wdat(disp_buf[0]);

lcd_wdat(disp_buf[1]);

}

/*定时器1初始化*/

/*void timer1_init()

{

SREG=0X80;

//MCUCR=(1<<ISC01)|(1<<ISC00);

TIMSK|=(1<<TOIE1);

TCNT1H=0XFb;

TCNT1L=0X1e;

TCCR1A|=0X00;

TCCR1B|=(1<<CS11)|(1<<CS10);

}

*/

/*#pragma interrupt_handler timer0_ovf:10

void timer0_ovf(void)

{

}

*/

/*定时器1终端服务函数*/

/*#pragma interrupt_handler timer1_ovf:9

void timer1_ovf(void)

{

}*/

//}

/*if(count_10ms>=100)

{

count_10ms=0;

time_buf[0]++;

if(time_buf[0]==60)

{

time_buf[0]=0;

time_buf[1]++;

if(time_buf[1]==60)

{

time_buf[1]=0;

time_buf[2]++;

if(time_buf[2]==24)

{

time_buf[0]=0;time_buf[1]=0;time_buf[2]=0;

}

}

}

}

}

*/

/*按键处理函数*/

void KeyProcess()

{

uint i;

uchar K;

uchar L;

uchar sec16,min16,hour16,day16,mon16,year16,week16;

write_ds1302(0x8e,0x00);

write_ds1302(0x80,0x80);

Delay_ms(10);

if((PIND&0X08)==0)

{

while(!(PIND&0X08));

beep(100);

K=K1_FLAG;

switch(K)

{

/*case 1:

{

time_buf[0]=time_buf[0]+1;

if(time_buf[0]==60)

time_buf[0]=0;

sec16=time_buf[0]/10*16+time_buf[0]%10;

write_ds1302(0x80,sec16);

}*/

//break;

case 1:

{

time_buf[1]=time_buf[1]+1;

if(time_buf[1]==60)

time_buf[1]=0;

min16=time_buf[1]/10*16+time_buf[1]%10;

write_ds1302(0x82,min16);

}

break;

case 2:

{

time_buf[2]=time_buf[2]+1;

if(time_buf[2]==24)

time_buf[2]=0;

hour16=time_buf[2]/10*16+time_buf[2]%10;

write_ds1302(0x84,hour16);

}

break;

case 3:

{

time_buf[5]=time_buf[5]+1;

if(time_buf[5]==8)

time_buf[5]=1;

week16=time_buf[5]/10*16+time_buf[5]%10;

write_ds1302(0x8a,week16);

}

break;

case 4:

{

time_buf[3]=time_buf[3]+1;

if(time_buf[3]==31)

time_buf[3]=1;

day16=time_buf[3]/10*16+time_buf[3]%10;

write_ds1302(0x86,day16);

}

break;

case 5:

{

time_buf[4]=time_buf[4]+1;

if(time_buf[4]==12)

time_buf[4]=0;

mon16=time_buf[4]/10*16+time_buf[4]%10;

write_ds1302(0x88,mon16);

}

break;

case 6:

{

time_buf[6]=time_buf[6]+1;

if(time_buf[6]==99)

time_buf[6]=0;

year16=time_buf[6]/10*16+time_buf[6]%10;

write_ds1302(0x8c,year16);

}

break;

default:break;

}

}

if((PIND&0X10)==0)

{

while(!(PIND&0X10));

beep(100);

L=K1_FLAG;

switch(L)

{

/*case 1:

{

time_buf[0]=time_buf[0]-1;

if(time_buf[0]==0)

time_buf[0]=59;

sec16=time_buf[0]/10*16+time_buf[0]%10;

write_ds1302(0x80,sec16);

}*/

//break;

case 1:

{

time_buf[1]=time_buf[1]-1;

if(time_buf[1]==0)

time_buf[1]=59;

min16=time_buf[1]/10*16+time_buf[1]%10;

//Delay_ms(150);

write_ds1302(0x82,min16);

}

break;

case 2:

{

time_buf[2]=time_buf[2]-1;

if(time_buf[2]==0)

time_buf[2]=23;

hour16=time_buf[2]/10*16+time_buf[2]%10;

//Delay_ms(150);

write_ds1302(0x84,hour16);

}

break;

case 3:

{

time_buf[5]=time_buf[5]-1;

if(time_buf[5]==0)

time_buf[5]=7;

week16=time_buf[5]/10*16+time_buf[5]%10;

write_ds1302(0x8a,week16);

}

break;

case 4:

{

time_buf[3]=time_buf[3]-1;

if(time_buf[3]==0)

time_buf[3]=31;

day16=time_buf[3]/10*16+time_buf[3]%10;

//Delay_ms(150);

write_ds1302(0x86,day16);

}

break;

case 5:

{

time_buf[4]=time_buf[4]-1;

if(time_buf[4]==0)

time_buf[4]=12;

mon16=time_buf[4]/10*16+time_buf[4]%10;

//Delay_ms(150);

write_ds1302(0x88,mon16);

}

break;

case 6:

{

time_buf[6]=time_buf[6]-1;

if(time_buf[6]==0)

time_buf[6]=99;

year16=time_buf[6]/10*16+time_buf[6]%10;

//Delay_ms(150);

write_ds1302(0x8c,year16);

}

break;

default:break;

}

}

}

/*if((PIND&0X08)==0)

{

while(!(PIND&0X08));

beep();

time_buf[2]=time_buf[2]+1;

if(time_buf[2]==24)

time_buf[2]=0;

hour16=time_buf[2]/10*16+time_buf[2]%10;

write_ds1302(0x84,hour16);

}

if((PIND&0X10)==0)

{

while(!(PIND&0X10));

beep();

time_buf[1]=time_buf[1]+1;

if(time_buf[1]==60)

time_buf[1]=0;

min16=time_buf[1]/10*16+time_buf[1]%10;

write_ds1302(0x82,min16);

}*/

/*读取时间函数,并转化为十进制*/

void get_data()

{

uchar sec,min,hour,day,mon,week,year;

write_ds1302(0x8e,0x00);

write_ds1302(0x90,0xab);

sec=read_ds1302(0x81);

min=read_ds1302(0x83);

hour=read_ds1302(0x85);

day=read_ds1302(0x87);

mon=read_ds1302(0x89);

week=read_ds1302(0x8b);

year=read_ds1302(0x8d);

time_buf[0]=sec/16*10+sec%16;

time_buf[1]=min/16*10+min%16;

time_buf[2]=hour/16*10+hour%16;

time_buf[3]=day/16*10+day%16;

time_buf[4]=mon/16*10+mon%16;

time_buf[5]=week/16*10+week%16;

time_buf[6]=year/16*10+year%16;

}

/************温度-PWM转换函数******/

void Temp_PWM()

{

uint i;

if(TEMP<=0)

{

tempt=-1;

}

if(TEMP>0&&TEMP<300)

{

tempt=-1;

}

if(TEMP>=300&&TEMP<500)

{

tempt=256*(500-TEMP)/500;

}

if(TEMP>=500)

{

tempt=1;

beep(i);

}

}

/*******串口初始化********/

void uart0_Init(void)

{

UCSRB=0x00;

UCSRA=0X00;//发射器使能

/*设置帧格式*/

  UCSRC|= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//工作模式 ,8位字符,1位停止位 // UCSRC=0x86;

/*设置波特率*/

UBRRL=(fosc/16/(baud+1))%256;

UBRRH=(fosc/16/(baud+1))/256;

/*接收器与发送器使能*/

UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//UCSRB=0x98;

SREG|=BIT(7);

}

/*******发送数据函数********/

void UART0_send(uchar i)

{

uchar j;

while(!(UCSRA&(1<<UDRE)));

for(j=0;j<3;j++)

{UDR=i;}

}

void Usart_PutString(unsigned char *s)

{

while(*s)

{

UART0_send(*s++);

}

UART0_send(0x0d);

UART0_send(0x0a);

}

/*主函数*/

void main(void)

{

uint i;

uint JISHU;

port_init();

init_ds1302();

lcd_init();

lcd_clr();

//SREG=0X80;

uart0_Init();

//INT0_init();

//max6675_init();

//PWM_Init_IO();

TIMER0_Init();

//timer1_init();

LCD_write_str(11,0,line1_data);

while(1)

{

if((PIND&0X40)==0)

{

Delay_ms(10);

if((PIND&0X04)==0)

{

while(!(PIND&0X04));

beep(100);

K1_FLAG++;

if(K1_FLAG>6)K1_FLAG=1;

}

KeyProcess();

}

if((PIND&0X40)==0X40)

{

MAX6675_conv();

temp_disp();

}

if((PIND&0X20)==0)

{

while(!(PIND&0X20));

beep(100);

write_ds1302(0x80,0x00);

write_ds1302(0x8e,0x80);

K1_FLAG=0;

Delay_ms(15);

}

get_data();

LCD_conv(time_buf[0],time_buf[1],time_buf[2],time_buf[3],time_buf[4],time_buf[5],time_buf[6]);

LCD_disp();

Temp_PWM();

PWM_control(tempt);

//SEED=TEMP/10%16+TEMP%10;

for(i=1;i<4;i++)

{UART0_send(show_data);}

UART0_send(0x0d);

UART0_send(0x0a);

//Usart_PutString("温度");

}

}

/*********发送结束中断函数*******/

/*#pragma interrupt_handler UART0_TXD_vect:12

void UART0_TXD_vect(void)

{

SEED=TEMP;

UART0_send(SEED);

Usart_PutString("温度");

}*/

麻烦哪位大神帮我改一下,谢谢谢谢谢


敢不敢把报错的地方贴出来。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top