打印

求个大神帮我看看这个例程 为什么没有串口通信

[复制链接]
1266|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
singe0915|  楼主 | 2013-4-11 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<math.h>
#include<absacc.h>
#include <stdio.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int        
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,
                              0x66,0x6d,0x7d,0x07,
                              0x7f,0x6f,0x77,0x7c,
                              0x39,0x5e,0x79,0x71,0X40,0X00};
void send_char(unsigned char txd);
unsigned char tmp;

sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^5;
sbit lcdrs=P3^7;

uchar code tab[]="0123456789abcdef";
uchar tab_key[50];

uchar n=0,temp,key;

  

void lcd_disp();

void lcd_init();

void display(unsigned char);

void write_com(uchar);

void write_data(uchar);

void delay(unit);



void key_scan();

void key_manage1();

void key_manage2();

void key_manage3();

void key_manage4();

void key_manage5();

void key_manage6();

void key_manage7();

void key_manage8();

void key_manage9();

void key_manage10();

void key_manage11();

void key_manage12();

void key_manage13();

void key_manage14();

void key_manage15();

void key_manage16();









void lcd_disp()

{

         uchar a,i=0;

         write_com(0x80);


        i=0;
        while(i<n)

         {

            a=tab_key[i];

            write_data(tab[a]);
            i++;
            if(i==15)
            {
              write_com(0x80+0x40);
            }
            
          }

}
                 









void lcd_init()

{

         dula=0;

         wela=0;

         lcden=0;

         write_com(0x38);

         write_com(0x0c);

        write_com(0x06);
               
                write_com(0x80);

       // write_com(0x80+0x40);               

}






void write_com(uchar com)

{

         lcdrs=0;

         P2=com;

         delay(3);

         lcden=1;

         delay(5);

         lcden=0;

}



void write_data(uchar dat)

{

         lcdrs=1;

         P2=dat;

         delay(3);

         lcden=1;

         delay(5);

         lcden=0;

}









void key_scan()

{

         P1=0xfe;

         temp=P1;

         temp=temp&0xf0;

         if(temp!=0xf0)

                 {

                         delay(100);

                         if(temp!=0xf0)

                                 {

                                         temp=P1;

                                         switch(temp)

                                                 {

                                                         case 0xee:   key_manage1();display(0);   break;

                                                         case 0xde:   key_manage2();display(1);   break;

                                                         case 0xbe:   key_manage3();display(2);   break;

                                                         case 0x7e:   key_manage4();display(3);   break;

                                                 }

                                         while(temp!=0xf0)

                                                 {

                                                         temp=P1;

                                                         temp=temp&0xf0;

                                                 }

                                 }

                 }

         P1=0xfd;

                 temp=P1;

                 temp=temp&0xf0;

                 if(temp!=0xf0)

                         {

                                 delay(100);

                                 if(temp!=0xf0)

                                         {

                                                 temp=P1;

                                                 switch(temp)

                                                         {

                                                                 case 0xed:   key_manage5();display(4);   break;

                                                                 case 0xdd:   key_manage6();display(5);   break;

                                                                 case 0xbd:   key_manage7();display(6);   break;

                                                                 case 0x7d:   key_manage8();display(7);   break;

                                                         }

                                                 while(temp!=0xf0)

                                                         {

                                                                 temp=P1;

                                                                 temp=temp&0xf0;

                                                         }

                                         }

                         }

         P1=0xfb;

                 temp=P1;

                 temp=temp&0xf0;

                 if(temp!=0xf0)

                         {

                                 delay(100);

                                 if(temp!=0xf0)

                                         {

                                                 temp=P1;

                                                 switch(temp)

                                                         {

                                                                 case 0xeb:   key_manage9();display(8);    break;

                                                                 case 0xdb:   key_manage10();display(9);   break;

                                                                 case 0xbb:   key_manage11();display(10);   break;

                                                                 case 0x7b:   key_manage12();display(11);   break;

                                                         }

                                                 while(temp!=0xf0)

                                                         {

                                                                 temp=P1;

                                                                 temp=temp&0xf0;

                                                         }

                                         }

                         }

         P1=0xf7;

         temp=P1;

         temp=temp&0xf0;

         if(temp!=0xf0)

                 {

                         delay(100);

                         if(temp!=0xf0)

                                 {

                                         temp=P1;

                                         switch(temp)

                                                 {

                                                         case 0xe7:   key_manage13();display(12);   break;

                                                         case 0xd7:   key_manage14();display(13);   break;

                                                         case 0xb7:   key_manage15();display(14);   break;

                                                         case 0x77:   key_manage16();display(15);   break;

                                                 }

                                         while(temp!=0xf0)

                                                 {

                                                         temp=P1;

                                                         temp=temp&0xf0;

                                                 }

                                 }

                 }

}



void display(unsigned char S)      

{                               

  P0 = table[S];

delay(200);                    

P2 = 0x7f;

}







void delay(uint k)

{

         uint i,j;

         for(i=k;i>0;i--)

         for(j=50;j>0;j--);

}






           

void key_manage1()
{
         tab_key[n]=0;
         n++;
}
void key_manage2()
{
         tab_key[n]=1;
         n++;
}
void key_manage3()
{
         tab_key[n]=2;
         n++;
}
void key_manage4()
{
         tab_key[n]=3;
         n++;
}
void key_manage5()
{
         tab_key[n]=4;
         n++;
}
void key_manage6()
{
         tab_key[n]=5;
         n++;
}
void key_manage7()
{
         tab_key[n]=6;
         n++;
}
void key_manage8()
{
         tab_key[n]=7;
         n++;
}
void key_manage9()
{
         tab_key[n]=8;
         n++;
}
void key_manage10()
{
         tab_key[n]=9;
         n++;
}
void key_manage11()
{
         tab_key[n]=10;
         n++;
}
void key_manage12()
{
         tab_key[n]=11;
         n++;
}
void key_manage13()
{
         tab_key[n]=12;
         n++;
}
void key_manage14()
{
         tab_key[n]=13;
         n++;
}

void key_manage15()
{
         tab_key[n]=14;
         n++;
}
void key_manage16()
{
         tab_key[n]=15;
         n++;
}

void InitUART(void)
{
        SCON = 0x52;
        TMOD = 0x20;
        TCON = 0x69;
        TH1 = 0xf3;

       

}
void main()

{                 
                 lcd_init();
                 write_com(1);
                 TMOD = 0x20;                        // 定时器1工作于8位自动重载模式, 用于产生波特率
                TH1 = 0xFD;                                // 波特率9600
                TL1 = 0xFD;
                SCON = 0x50;                        // 设定串行口工作方式
                PCON &= 0xef;                        // 波特率不倍增       
                TR1 = 1;                                // 启动定时器1
                IE = 0x0;                                // 禁止任何中断
                P2=0x7f;
                 while(1)
                         {                if(RI)                                                // 是否有数据到来
                {
                        RI = 0;
                        tmp = SBUF;                                // 暂存接收到的数据
                        P0 = tmp;                                // 数据传送到P0口
                        send_char(tmp);                        // 回传接收到的数据
                }               
                                key_scan();
                                lcd_disp();
                                if(n>15)
                                write_com(0x80+0x40);
                                        {       
                                               
                                                P3=        0x10;
                                                delay(10);
                                                P3=        0x18;
                                                delay(10);
                                                P3=        0x04;
                                                delay(10);
                                                P3=        0x08;
                                                delay(10);
                                                P3=        0x0c;
                                                delay(10);
                                                P3=        0x1c;
                                                delay(10);
                                                P3=        0x14;
                                                delay(10);
                                        }
                                        }
                                       

                       
}       
                                                              
void send_char(unsigned char txd)
// 传送一个字符
{
        SBUF = txd;
        while(!TI);                                // 等特数据传送
        TI = 0;                                        // 清除数据传送标志
}

相关帖子

沙发
jiaxinhui| | 2013-4-11 21:36 | 只看该作者
你的代码好长啊,建议你直接说出你目前程序遇到什么问题,那问题与疑问明确点,这样大家才会帮你。这么长的代码,很少有人完整看下去的。

使用特权

评论回复
板凳
hlzhaowu| | 2013-4-11 22:46 | 只看该作者
楼上说得对啊,楼主想要把问题找出来也是一个个功能模块代码查啊

使用特权

评论回复
地板
zd420325| | 2013-4-13 09:29 | 只看该作者
《程序调试黑宝书》

使用特权

评论回复
5
Breming| | 2013-4-13 12:29 | 只看该作者
搞单片机就是一步一步的调试,调试到某一步发现问题再拿出来讨论,这样一上来就贴代码,是没有都少人看了。。。

使用特权

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

本版积分规则

4

主题

12

帖子

1

粉丝