0;j--) for(k=110;k。pic16f877a的AD实验学习。" />

pic16f877a的AD实验学习

一、主函数

  1. //采集AD值

  2. #include
  3. #include "ad.h"
  4. #include "usart.h"

  5. __CONFIG(0xFF32);

  6. const uchar disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  7. 0x07,0x7f,0x6f};

  8. //延时函数
  9. void delayms(uint x)
  10. {
  11. uint j,k;
  12. for(j=x; j>0; j--)
  13. for(k=110; k>0; k--);
  14. }

  15. //显示4位,低位数码管显示不正常
  16. void display(uint x)
  17. {
  18. PORTD= disp[x/1000]|0x80;
  19. PORTA= 0x10;
  20. delayms(2);

  21. PORTD= disp[x/100%10];
  22. PORTA= 0x08;
  23. delayms(4);

  24. PORTD= disp[x/10%10];
  25. PORTA= 0x04;
  26. delayms(2);

  27. PORTD= disp[x%10];
  28. PORTA= 0x02;
  29. delayms(2);
  30. }



  31. //初始化IO
  32. void init()
  33. {
  34. TRISA = 0x01; //RA0 input mode
  35. TRISC = 0xff; //RC output mode
  36. TRISD = 0;
  37. PORTC = 0x01;

  38. ADCON0 = 0x41; //ADCS1:ADCS0=01,AN0,,A/D On
  39. ADCON1 = 0x8E; //right justified,ADCS2=0,1110
  40. delayms(10);
  41. }

  42. //获取AD值
  43. uint getad()
  44. {
  45. uint adval;
  46. float advalf;
  47. GO = 1;
  48. while(GO);
  49. adval = ADRESH;
  50. adval = adval<<8|ADRESL;
  51. advalf = adval/1023.0*5.0; //转换成电压
  52. adval = (uint)(advalf*1000); //转换成4位整型
  53. return (adval);
  54. }

  55. void main()
  56. {
  57. uint i = 0;
  58. uint temp;
  59. init();
  60. usart_init();
  61. while(1)
  62. {
  63. temp = getad();
  64. display(temp);
  65. if(i == 100)
  66. {
  67. usart_tx(temp>>8);
  68. usart_tx(temp);
  69. i=0;
  70. }
  71. delayms(5);
  72. i++;
  73. }
  74. }
二、usart函数
  1. #include
  2. #include "usart.h"

  3. //串口初始化
  4. void usart_init(void)
  5. {
  6. SPBRG = 0xC; //波特率19200
  7. TXSTA = 0x24; //开启发送,高速模式
  8. RCSTA = 0X90; //使能TXRX引脚,接收到CREN直到被清零
  9. RCIE = 0X1; //使能接受中断
  10. GIE = 0X1; //开启总中断
  11. PEIE = 0X1; //开启串口中断
  12. }

  13. void interrupt usart(void)
  14. {
  15. if(RCIE && RCIF)
  16. {
  17. TXREG = RCREG; //返回接收的数据
  18. }
  19. }

  20. void usart_tx(unsigned char date)
  21. {
  22. TXREG = date;
  23. while(TRMT!=1);
  24. }


阅读(0) | 评论(0) | 转发(0) | 0 上一篇:uORBMain.cpp学习
【pic16f877a的AD实验学习】下一篇:pic16f877a的PWM实验学习
相关热门文章
  • SHTML是什么_SSI有什么用...
  • 查看linux中某个端口(port)...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
给主人留下些什么吧!~~ 评论热议

    推荐阅读