打印

红外线+LCD1602 求助

[复制链接]
2532|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaomin2013|  楼主 | 2013-12-5 19:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己也不知道看了多少遍了 眼睛都花了 问题就是看不出来 或许我犯的错误比较幼稚 恳请知道的朋友们 能够指点一二  

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define lcd_data_port P0
sbit lcd_en_port=P3^4;
sbit lcd_rs_port=P3^5;
sbit lcd_rw_port=P3^6;

uchar code line0[16]={" user:          "};
uchar code line1[16]={" data:          "};
/*****************************************/
uchar irtime;
uchar irdata[33],ircode[4];
bit ir_ok,startflag,ir_process_ok;
uchar code lcd_num_to_char[16]={"0123456789ABCDEF"}
/*****************************************/
/************红外线部分*******************/
/*****************************************/


void timer0() interrupt 1 //定时器0的服务函数
{
        irtime++; //一共多少个256us
}

void EX0_init() //外部中断0的初始化函数
{
        EA=1;
        EX0=1;
        IT0=1; //下降沿触发       
}

void ex0() interrupt 0//外部中断0的服务函数
{
        uchar num;
        if(startflag)
        {
                if(irtime>33&&irtime<63)
                {
                        num=0;
                }
                irdata[num]=irtime;
                num++;
                if(num==33)
                {
                        num=0;
                        ir_ok=1;
                }
        }                                 
        else
        {
                irtime=0;
                startflag=1;
        }       
}
void ir_process()  //红外码值处理
{
        uchar i,j,temp,k=0;
        for(j=0;j<4;j++)
        {       
                for(i=0;i<8;i++)
                {
                        temp=irdata[k+1];
                        temp=temp>>1;
                        if(irtime>7)
                        {
                                temp=temp|0x80;       
                        }
                        k++;
                }
                temp=0;
                ircode[j]=temp;
        }
        ir_process_ok=1;
}


/*****************************************/
/***********LCD1602部分*******************/
/*****************************************/
void delay_ms(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);       
}

void lcd_busy_wait()
{
        lcd_rs_port=0;
        lcd_rw_port=1;
        lcd_en_port=1;
        lcd_data_port=0xff;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while(lcd_data_port&0x80);
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    lcd_en_port=0;
}
void write_com(uchar com)
{
        lcd_busy_wait();
        lcd_rs_port=0;
        lcd_rw_port=0;
        lcd_en_port=0;
        lcd_data_port=com;
        lcd_en_port=1;
        lcd_en_port=0;       
}

/*void write_dat(uchar dat)
{
        lcd_busy_wait();
        lcd_rs_port=1;
        lcd_rw_port=0;
        lcd_en_port=0;
        lcd_data_port=dat;
        lcd_en_port=1;
        lcd_en_port=0;       
}          */

void lcd_init()
{
        delay_ms(15);
        write_com(0x38);
        delay_ms(5);
        write_com(0x38);
        delay_ms(5);
        write_com(0x38);
        delay_ms(10);

        write_com(0x08);
        write_com(0x01);
        write_com(0x06);
        write_com(0x0c);
               
}
void write_dat(uchar x_pos,y_pos,dat)
{
        x_pos=x_pos&0x0f;
        y_pos=y_pos&0x01;
        if(y_pos==1)
        {
                x_pos=x_pos+0x40;
        }
        x_pos=x_pos+0x80;
        write_com(x_pos);
        lcd_busy_wait();
        lcd_rs_port=1;
        lcd_rw_port=0;
        lcd_en_port=0;
        lcd_data_port=dat;
        lcd_en_port=1;
        lcd_en_port=0;               
}
/*****************************************/
/***********LCD1602部分*******************/
/*****************************************/
void main()
{
        uchar i;
        lcd_init();
        for(i=0;i<16;i++)
        {
                write_dat(i,0,line0[i]);       
        }
        for(i=0;i<16;i++)
        {
                write_dat(i,1,line1[i]);       
        }
//        EX0_init();
//        T0_init();
        while(1)
        {
                if(ir_ok==1)
                {
                        ir_ok=0;
                        ir_process();
                }
                if(ir_process_ok==1)
                {
                        write_dat(8,0,lcd_num_to_char[ircode[0]/0x10]);
                        write_dat(9,0,lcd_num_to_char[ircode[0]%0x10]);
                        write_dat(10,0,lcd_num_to_char[ircode[1]/0x10]);
                        write_dat(11,0,lcd_num_to_char[ircode[1]/0x10]);

                        write_dat(8,1,lcd_num_to_char[ircode[2]/0x10]);
                        write_dat(9,1,lcd_num_to_char[ircode[2]%0x10]);
                        write_dat(10,1,lcd_num_to_char[ircode[3]/0x10]);
                        write_dat(11,1,lcd_num_to_char[ircode[3]%0x10]);
                               
                }               
        }       
}

相关帖子

沙发
xiaomin2013|  楼主 | 2013-12-5 19:08 | 只看该作者
这是keil提示的错误...是不是很有:(
ykjs_4.c(20): error C141: syntax error near 'void'
ykjs_4.c(21): error C141: syntax error near '{'
ykjs_4.c(22): error C231: 'TMOD': redefinition
ykjs_4.c(22): error C231: 'TMOD': redefinition
ykjs_4.c(23): error C231: 'TH0': redefinition
ykjs_4.c(23): error C231: 'TH0': redefinition
ykjs_4.c(24): error C231: 'TL0': redefinition
ykjs_4.c(24): error C231: 'TL0': redefinition
ykjs_4.c(26): error C231: 'ET0': redefinition
ykjs_4.c(26): error C231: 'ET0': redefinition
ykjs_4.c(26): error C141: syntax error near ';'
ykjs_4.c(27): error C231: 'TR0': redefinition
ykjs_4.c(27): error C231: 'TR0': redefinition
ykjs_4.c(28): error C141: syntax error near '}'
Target not created

使用特权

评论回复
板凳
xiaomin2013|  楼主 | 2013-12-5 19:09 | 只看该作者
亲 我在线等你们 刚注册的号 要分的我给分 要威望的给威望 反正要什么给什么 只要我有的 ...

使用特权

评论回复
地板
xiaomin2013|  楼主 | 2013-12-5 19:28 | 只看该作者
这是代码

红外 lcd1602.rar

1.16 KB

使用特权

评论回复
5
651927693| | 2013-12-5 21:26 | 只看该作者
总要说清楚你的需求,还有出现的问题吧

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xiaomin2013 + 1 赞一个!
6
dirtwillfly| | 2013-12-5 21:37 | 只看该作者
重点检查下拼写错误、标点符号和全角字符吧

使用特权

评论回复
7
xiaomin2013|  楼主 | 2013-12-5 21:46 | 只看该作者
出现的错误 排查不出来...

使用特权

评论回复
8
xiaomin2013|  楼主 | 2013-12-5 21:49 | 只看该作者
郁闷 都好几个小时了 写程序不难 难的怎么才能把程序没错误的搞出来...

使用特权

评论回复
9
58180698| | 2013-12-6 07:08 | 只看该作者
uchar code lcd_num_to_char[16]={"0123456789ABCDEF"}
在这句后面加分号试试。

使用特权

评论回复
10
icefox225| | 2013-12-6 07:20 | 只看该作者
楼上正解

使用特权

评论回复
11
liaohongcai8204| | 2013-12-6 10:06 | 只看该作者
//void uart_sendchar(uchar send_byte);

/*********************************uart initialization*************************************/
void uart_init(uchar baud_rate)
{
    SCON = 0x50;                        //定义串口模式为8bit可变,无校验位
    AUXR = 0x15;                        //波特率发生器12倍速,并启动波特率发生器定时器
    BRT = baud_rate;                    //初始化波特率发生器定时器的定时初值
    ES = 1;                             //使能串口中断
    EA = 1;                             //打开全局中断开关
}
void uart_sendchar(uchar send_byte)
{
        ES = 0;
        TI = 0;
        SBUF = send_byte;
        while(!TI);
        TI = 0;
        ES = 1;
}

void uart() interrupt 4 using 1         //串口中断服务程序
{
        uchar byte;
    if (TI) TI = 0;                     //发送完成中断
    if (RI)                             //接收完成中断
    {
        if (SBUF == 0x7f)
        {
            updata_hand++;
            if (updata_hand >= 16)
            {
                IspProgram();           //调用下载模块(****重要语句****)
            }
        }
        else
        {
                        byte = SBUF;
                        uart_sendchar(byte);
            updata_hand = 0;
        }
        RI = 0;                         //清接收完成标志
    }
}
void extint0init()
{
        IT0 = 1;                                                         //下降沿有效
        EX0 = 1;
        EA = 1;
}
void extint0() interrupt 0
{       

/*下面被注释掉的代码是红外解码程序*/

        TR0 = 0;
        recvbegin = 1;
        TimeH = 0;
//        uart_sendchar(TimeL%256);
//        uart_sendchar(TimeL/256);
        TimeH = TimeL;
        TimeL = 0;
        TL0 = 0xd2;
        TH0 = 0xff;
        TR0 = 1;
}               


void timer0init()
{
        TMOD = 0X01;
        TL0 = 0xd2;
        TH0 = 0xff;
        ET0 = 1;
        EA = 1;
}
void timer0interrupt() interrupt 1
{
        TL0 = 0xd2;
        TH0 = 0xff;
        TimeL++;
}


void main()
{
        int i=0;
        uchar getI = 0;
        uchar sendGetI = 0;
        uint getbyte= 0;
        uint sendint = 0;
        uart_init(BAUD);
        timer0init();
        extint0init();
        I2Ccommand[0]=0;

/*以下被注释掉的代码是红外解码的代码*/

        timer0init();
        command[0]=0;
        command[1]=0;
        P1M0 = 0x60;
        P1M1 = 0x00;
        UP = 1;
        PT = 0;
//        Down = 0;
//        uart_sendchar(55);
        while(1)
        {
                if(recvbegin == 1)                                //接收一位数据
                {
//                        uart_sendchar(TimeH/256);
//                        uart_sendchar(TimeH%256);
                        if((TimeH>250)&&(TimeH<<270))
                        {
                                int goodluck;
                                recvflag = 1;                        //收到红外开始命令
                                goodluck = 0;       
                        }
                        if((TimeH>20)&&(TimeH<24))                                //收到数据“0”
                        {
                                getbyte=0;
                                command[0]|=(getbyte<<i);
                                getI++;
                                i++;                                                                        
                        }
                        if((TimeH>41)&&(TimeH<45))                                //收到数据“1”
                        {
                                getbyte=1;
                                command[0]|=(getbyte<<i);
                                getI++;
                                i++;
                        }
                        if((TimeH>217)&&(TimeH<221))
                        {
                                 uart_sendchar(0x01);       
                        }
                        if(getI==16)
                        {
                                command[1]=command[0];
                                command[0] = 0;
                                sendint = command[1];
                                uart_sendchar(sendint/256);
                                uart_sendchar(sendint%256);       
                                i = 0;
                        }
                        if(getI==32)
                        {
                                sendint = command[0];
                                uart_sendchar(sendint/256);
                                uart_sendchar(sendint%256);       
//                                command[0]=0;
//                                command[1]=0;
                                TimeL = 0;
                                getI = 0;
                                i = 0;
       
                               
                                if((command[1]==32640)&& (command[0]==46155))
                                {
                                        UP = 0;
//                                        Down = 0;
//                                        UP = 1;       
                                }
                                  
                                if((command[1]==0x7f80)&& (command[0]==0xec13))       
                                {
                                        UP = 0;
                                        Down = 0;
                                        Down = 1;
                                }  


                                command[0]=0;
                                command[1]=0;
                        }
                        recvbegin = 0;
                }
                if(TimeL>3000)
                {
                          recvbegin = 0;
                        TR0 = 0;
                        TimeL = 0;
                        TimeH = 0;
                        getI=0;
                        i=0;
                        getbyte=0;
                        recvflag = 0;
                        command[0]=0;
                        command[1]=0;
                        UP = 1;
//                        Down = 0;
//                        uart_sendchar(0);
                }
        }
}

使用特权

评论回复
12
liaohongcai8204| | 2013-12-6 10:08 | 只看该作者
你把我给你的代码弄进去看看!我的已经用了好多年了!很好用!各种红外都差不多!

使用特权

评论回复
13
老鱼探戈| | 2013-12-6 10:54 | 只看该作者
全是些低级错误,先编译通过了再来问问题

使用特权

评论回复
14
黄小俊| | 2013-12-6 13:50 | 只看该作者
redefine是不是编译器有问题啊

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xiaomin2013 + 1 赞一个!
15
xiaomin2013|  楼主 | 2013-12-7 10:43 | 只看该作者
重新抄了一边 没问题了 感谢大家...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

0

粉丝