历史上的今天
返回首页

历史上的今天

今天是:2024年11月09日(星期六)

正在发生

2019年11月09日 | PIC单片机ad采样在LCD上显示

2019-11-09 来源:51hei


/* Main.c file generated by New Project wizard

*

* Created:   周二 4月 10 2018

* Processor: PIC18F452

* Compiler:  MPLAB C18

*/

#include

#define RW PORTBbits.RB5

#define RS PORTBbits.RB6

#define EN PORTBbits.RB7

#define P0 PORTD

#define ADGO ADCON0bits.GO

void tmr(void);

void KeyInterrupt1 (void); //中断服务函数

void KeyInterrupt2 (void); //中断服务函数

void KeyInterrupt3 (void); //中断服务函数

void lcd_show(void);

void lcd_show1(void);

void lcd_show2(void);

void lcd_show3(void);

void lcd_show4(void);

void lcd_show5(void);

void lcd_show6(void);

unsigned int AD_Trs(void);

unsigned int AD_Trs1(void);

unsigned int AD_Trs2(void);

//int j=0;

//int time=0;

//int timem=0;

int intermode=0;

unsigned int lednum=0;

int  max=4000,max1=3900,max2=3800,max3=3700;

int   min=1000,min1=900,min2=800,min3=1000;

unsigned char time2[7]="wangkuod";

unsigned int a1=0,a2=0,a3=0;

    int init();    //声明初始化函数

     int write_com(unsigned char);//声明写命令函数

      int write_date(unsigned char);//声明写数据函数

      int delay(unsigned char);//声明延迟函数

      unsigned char x;

//sbit RS = P1^0;

  // sbit RW = P1^1;

  //sbit EN = P1^2;


//unsigned char table[]="HELLO!";

//unsigned char table1[]="2018/4/16";

void main(void)//主函数

{    

    TRISD=0;

TRISBbits.TRISB0=1;

TRISBbits.TRISB1=1;

TRISBbits.TRISB2=1;

    TRISBbits.TRISB5=0;

TRISBbits.TRISB6=0;

TRISBbits.TRISB7=0;

TRISAbits.TRISA0=1;

  TRISAbits.TRISA1=1; 

TRISAbits.TRISA2=1;

TRISAbits.TRISA6=0;


// INTCON |= 0xa0; //开全局中断及Timer0 中断

//INTCONbits.TMR0IE=1;

INTCONbits.GIE=1;

//INT0

INTCON2bits.INTEDG0=1;

INTCONbits.INT0IF=0;

INTCONbits.INT0IE=1;

//INT1

INTCON2bits.INTEDG1=1;

INTCON3bits.INT1IF=0;

INTCON3bits.INT1IE=1;

//int2

INTCON2bits.INTEDG2=1;

INTCON3bits.INT2IF=0;

INTCON3bits.INT2IE=1;


//TMR0H = 25536/256; //高8 位

//TMR0L = 25536%256; //低8 位

//T0CON = 0x88; //使能Timer0,并设置为16 位定时器,没有预分频

//AD

ADCON0=0x81;

//-- ADFM ADCS2 —— —— PCFG3 PCFG2 PCFG1 PCFG0

//-- 1 0 0 0 1 1 1 0

//右对齐(ADRESH 寄存器的高6 位读作0),AN0 为模拟输入位,参考正负电压

//分别为VDD 和VSS

ADCON1 = 0x8e;


     init();

  


   // write_com(0x80);    

//    for(x=0;x<6;x++)

//    {

//          write_date(table[x]);

//         delay(150);

//   }


//for(x=0;x<6;x++)

   //  {

   //       write_date(time);

//         delay(150);

//    } 




   //  write_com(0x80);    

  //   for(x=0;x<17;x++)

  //  {

//        write_date(table1[x]);

//        delay(150);

//   }

     while(1)

  {

   unsigned int a; 

   lednum = AD_Trs();

   write_com(0x80);

   time2[1]='0';

   lcd_show();

   

   lednum = AD_Trs1();

   write_com(0x80+0x08);

   time2[1]='1';

   lcd_show();

   

   lednum = AD_Trs2();

   write_com(0x80+0x40);

   time2[1]='2';

   lcd_show();

  switch(intermode) {

  case 0: {write_com(0x80+0x40+0x08);

  lcd_show1();break;

   }

      

case 1:

   {write_com(0x80+0x40+0x08);

   lcd_show2();break;}

   

  case 2: 

   {write_com(0x80+0x40+0x08);

   lcd_show3();break;

   }

   

  case 3: 

   {write_com(0x80+0x40+0x08);

   lcd_show4();break;

   }

  

  case 4: 

   {write_com(0x80+0x40+0x08);

   lcd_show5();break;

   }


  case 5: 

   {write_com(0x80+0x40+0x08);

   lcd_show6();break;

   }

   

default:

  {write_com(0x80);

   lcd_show1();break;

   }

  }

   

if(lednum>max1|lednum>max2|lednum>max3|lednum//for(a=10;a>0;a--)

//{PORTAbits.RA3=0; 

//   delay(50);

  //   PORTAbits.RA3=1;

  //  delay(50);

   //  PORTAbits.RA3=0;  

   // delay(50);

   //  PORTAbits.RA3=1;  

  //  delay(50);} 

PORTAbits.RA6=1; }

  

  } 

   

}




#pragma code xx=0x0008 //MCC18 的中断必需用一段汇编实现

void inter(void) //xx 为优先级,没有优先级时,可省略xx

{

if(INTCONbits.INT0IF){

  _asm  

  goto KeyInterrupt1

  _endasm}

else if(INTCON3bits.INT1IF){

   _asm  

   goto KeyInterrupt2

   _endasm

  }

else {

   _asm  

   goto KeyInterrupt3

   _endasm

  }

  

}


//=======中断服务函数==========

#pragma interrupt KeyInterrupt1

void KeyInterrupt1 (void)

{

if (INTCONbits.INT0IF && INTCONbits.INT0IE) //中断标志位判断

{

//T0CONbits.TMR0ON=~T0CONbits.TMR0ON;

INTCONbits.INT0IF = 0; //中断标志位清零

switch(intermode) {

  case 0: 

   {max1=max1+100; break;

   }

      

case 1:

   {max2=max2+100;break;}

   

  case 2: 

   {max3=max2+100;break;

   }

   

  case 3: 

   {min1=min1+100;break;

   }

  

  case 4: 

   {min2=min2+100;break;

   }


  case 5: 

   {min3=min3+100;break;

   }

   

default:

  {max1=max1+100;break;

   }

  } 


}

}

#pragma code

//=======中断服务函数==========

#pragma interrupt KeyInterrupt2

void KeyInterrupt2 (void)

{

if (INTCON3bits.INT1IF && INTCON3bits.INT1IE) //中断标志位判断

{

//T0CONbits.TMR0ON=~T0CONbits.TMR0ON;

//intermode=~intermode;

INTCON3bits.INT1IF = 0; //中断标志位清零

intermode++;

if(intermode>5)

{intermode=0;}

}

}

#pragma code

#pragma interrupt KeyInterrupt3

void KeyInterrupt3 (void)

{

if (INTCON3bits.INT2IF && INTCON3bits.INT2IE) //中断标志位判断

{

//time=timem=j=0;

// T0CONbits.TMR0ON=0;


INTCON3bits.INT2IF = 0; //中断标志位清零

switch(intermode) {

  case 0: 

   {max1=max1-100; break;

   }

      

case 1:

   {max2=max2-100;break;}

   

  case 2: 

   {max3=max2-100;break;

   }

   

  case 3: 

   {min1=min1-100;break;

   }

  

  case 4: 

   {min2=min2-100;break;

   }


  case 5: 

   {min3=min3-100;break;

   }

   

default:

  {max1=max1-100;break;

   }

  } 


}

}

#pragma code


int init()//初始化函数体

{

    EN = 0;

     write_com(0X38);//设置16*2显示,5*7点阵,8位数据接口

     write_com(0X0C);//设置开显示,不显示光标

     write_com(0X06);//写一个字符时,整屏右移

     write_com(0X01);//显示清零

    return 0;

}

int write_com(unsigned char com)//写命令的函数体

{

    RS = 0;

    RW = 0;

    P0 = com;

     delay(5);

     EN = 1;

     delay(5);

     EN = 0;

    return 0;        

}


int write_date(unsigned char date)//写数据的函数体

{

     RS = 1;

     RW = 0;

     P0 = date;

     delay(5);

     EN = 1;

     delay(5);

     EN = 0;

     return 0;        

}


int delay(unsigned char xms)

{

     unsigned char x,y;

     for(x=xms;x>0;x--)

         for(y=110;y>0;y--);

     return 0;

}

void lcd_show1(void)

{

// unsigned char a,b;

//  unsigned char time2[7];

//   unsigned int time1[2];

//   unsigned int time3[2];

   

  

  //time3[0]=j/10;

   //time3[1]=j%10;

   

   //time1[0]=time/10;

   //time1[1]=time%10;

  

  

  //此算法用于取出一个整数的各个位,来显示在LCD 上

  a1 = max1/1000;

  a2 = max1%1000/100;

  a3 = max1%100/10;

  //a4 = lednum%10;

   

   time2[0]='A';

   time2[1]='0';

   time2[2]='M';

   time2[3]='0'+a1;

   time2[4]='.';

    time2[5]='0'+a2;

   time2[6]='0'+a3;

       

     for(x=0;x<7;x++)

    {

          write_date(time2[x]);

        delay(15);

    }

   

   

   

  

  

  }

  

  

  

  void lcd_show2(void)

{

// unsigned char a,b;

   

//   unsigned int time1[2];

//   unsigned int time3[2];

//  unsigned int a1=0,a2=0,a3=0;

  

  //time3[0]=j/10;

   //time3[1]=j%10;

   

   //time1[0]=time/10;

   //time1[1]=time%10;

  

  

  //此算法用于取出一个整数的各个位,来显示在LCD 上

  a1 = max2/1000;

  a2 = max2%1000/100;

  a3 = max2%100/10;

  //a4 = lednum%10;

   

   time2[0]='A';

   time2[1]='1';

   time2[2]='M';

   time2[3]='0'+a1;

   time2[4]='.';

    time2[5]='0'+a2;

   time2[6]='0'+a3;

       

     for(x=0;x<7;x++)

    {

          write_date(time2[x]);

        delay(15);

    }

   

   

   

  

  

  }

  

void lcd_show3(void)

{

// unsigned char a,b;

//  unsigned char time2[7];

//   unsigned int time1[2];

//   unsigned int time3[2];

//   unsigned int a1=0,a2=0,a3=0;

  

  //time3[0]=j/10;

   //time3[1]=j%10;

   

   //time1[0]=time/10;

   //time1[1]=time%10;

  

  

  //此算法用于取出一个整数的各个位,来显示在LCD 上

  a1 = max3/1000;

  a2 = max3%1000/100;

推荐阅读

史海拾趣

CLARE公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

方向电子公司的发展小趣事

CLARE公司的创业之路始于对电子行业深厚的技术积累和敏锐的市场洞察力。公司的创始人凭借其深厚的专业知识和经验,准确把握了行业的发展趋势,成功开发了一系列具有竞争力的电子产品。这些产品在市场上获得了良好的反响,为CLARE公司奠定了坚实的技术和市场基础。

EMS GmbH公司的发展小趣事

近年来,随着汽车行业向电动化、智能化方向发展,汽车转换器注塑件的需求也发生了变化。EMS GmbH公司积极应对行业挑战,加大研发投入,推动产品向智能化、绿色化方向转型。同时,公司还关注新兴领域的发展机会,如新能源汽车、自动驾驶等领域,寻求新的增长点。这些努力使EMS GmbH公司能够保持行业领先地位,并在未来市场中保持竞争力。

GaN Systems公司的发展小趣事

随着市场的不断拓展和技术的不断进步,GAIA盖亚电源持续加大研发投入,致力于技术创新和产品升级。公司拥有一支由超过300名工程师组成的研发团队,他们紧密关注行业动态,积极应对新技术和市场趋势。每年,GAIA盖亚电源都会推出数百种新产品,以满足不同客户的需求。这些新产品不仅涵盖了更广泛的电压范围和输出功率,还集成了最新的滤波、网络调节等先进技术,进一步提升了产品的性能和可靠性。

ECI公司的发展小趣事

ECI公司自成立以来,一直致力于技术创新和研发。在电子行业的早期,ECI就投入巨资研发先进的半导体技术,成功推出了多款高性能、低功耗的芯片产品。这些产品迅速在市场上获得认可,为公司赢得了良好的口碑。随着技术的不断进步,ECI公司不断推出更加先进的电子产品,引领了电子行业的发展趋势。

Elite Semiconductor Products Inc公司的发展小趣事

在电子产品领域,品质是赢得消费者信任的关键。Elite深知这一点,因此在生产过程中严格把控每一个环节,确保产品的品质达到最高标准。公司建立了完善的质量管理体系,从原材料采购到生产流程,再到产品检验,都严格遵循国际标准和行业规范。这种对品质的坚持,让Elite的产品在市场上赢得了良好的口碑,也为公司赢得了众多合作伙伴的信任。

问答坊 | AI 解惑

希望热心的哥哥姐姐能帮帮我

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 :$ :$ :$ 毕业设计运气不好:剩下了一个最难的课题 完全不懂该怎么入手 求求万能的电子工程世界的论坛友友们帮帮忙?给点思路也行 谢谢了 任务:采用单片机或CPLD完成信号发生器的设计 ...…

查看全部问答>

电赛有老师带的朋友,说说你们现在在干嘛?

本帖最后由 paulhyde 于 2014-9-15 09:18 编辑 该考试的考完了,该毕业的毕业了,是时候该准备比赛了。 有老师带,可以有比较完备的备赛准备 但是没有老师带的同学,就似乎有些摸不着头脑了 那胸有成竹的朋友分享下你们现在在干嘛?该如何备赛 ...…

查看全部问答>

labview教材 (word格式)

labview教材 (word格式) …

查看全部问答>

了解一下AATI 原厂的手机产品应用框图!

AnalogicTech offers a complete portfolio of products for smartphones and other handheld equipment to fully optimize available energy, minimize losses, and prolong battery life.   For Li-ion polymer batteries, linear & ...…

查看全部问答>

高速串行接口的编码技术(8B10B)

高速串行接口的编码技术(8B10B)…

查看全部问答>

LED驱动电源设计考量--teleda

LED由于环保、寿命长、光电效率高等众多优点,近年来在各行业应用得以快速发展,LED的驱动电源成了关注热点,理论上,LED的使用寿命在10万小时以上,但在实际应用过程中,由于驱动电源的设计及驱动方式选择不当,使LED极易损坏.随着LED的应用日益广泛,LED ...…

查看全部问答>

有没有在单片之间用红外线通信的? 进来说说方案~~~~~~

我自己搭了个简单的,发送管直接接IO,收接用三极管放大一次,好像能接收,不过数据不正确........郁闷中....... 高手进来说说通常都怎样弄的吧.....…

查看全部问答>

关于win CE用CAB打包问题

我用CAB打包后,出的错误Log文件的内容是 “Error: Section [SourceDisksFiles] - file D:\\Program Files\\HelloCE\\HelloCE\\bin\\Debug\\HelloCE.exe cannot have a drive or pathname” 请问是什么原因?谢谢…

查看全部问答>

如何构建一个IRP命令使U盘弹出?

如何构建一个IRP命令使U盘弹出? 我想在U盘已经插入电脑上的情况下,构建一个IRP命令将U盘弹出,但不知道怎么做? 向大家请教…

查看全部问答>

pda设备号

请问各位大侠,我用vc2005做的windows mobile 下的软件,想做个简单的加密,请问该如何获得设备的一个唯一的号呢?…

查看全部问答>