找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于PIC16f1828单片机分立功能的程序整合在一起的问题

查看数: 3536 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-8-6 11:51

正文摘要:

新手求助,刚开始接触单片机,需要用pic16f1828实现PWM呼吸灯的功能,并可以通过一个按键以及一个光敏电阻来控制呼吸灯的亮灭;当光敏电阻感应到光照时灯带熄灭,同时可用按键点亮。我写了按键和光敏电阻的使用程序, ...

回复

ID:383379 发表于 2018-8-7 08:40
angmall 发表于 2018-8-6 18:39
给你改了一下试试。

好的,我试试,谢谢
ID:155507 发表于 2018-8-6 18:39
给你改了一下试试。

  1. #include <pic16f1828.h>
  2. #define ADC_NUM 8//转换次数
  3. #define LED LATC0
  4. //#include<pic16f1828.h>
  5. void IO_init()
  6. {
  7.         ANSELC=0;
  8.         PORTCbits.RC0=1;
  9.         TRISCbits.TRISC0=0;
  10.         TRISCbits.TRISC3=1;
  11.         WPUCbits.WPUC3=1;
  12. }
  13. void delay(unsigned int x)
  14. {
  15.         unsigned int y,z;
  16.        
  17.         for(y=x; y>0; y--)
  18.                 for(z=25; z>0; z--);
  19. }

  20. void init_GPIO(void)
  21. {
  22.         TRISC=0x04;
  23.         ANSELC=0x04;
  24.         PORTC=0x00;
  25.         LATC=0x00;
  26. }
  27. void init_fosc(void)
  28. {
  29.         OSCCON=0xF0;
  30. }
  31. void init_AD(void)
  32. {
  33.         ADCON1=0XA0;//右对齐,32时钟,参考电源电压
  34.         ADCON0=0x18;//AN6通道
  35.         ADCON0bits.ADON=1;
  36. }
  37. unsigned int ADC_BAT_ONE(void)
  38. {
  39.         unsigned int value;
  40.        
  41.         value=0;
  42.         ADCON0bits.CHS=6;
  43.         ADCON0bits.ADGO=1;
  44.         while(ADCON0bits.GO==1);
  45.         value=(unsigned int)ADRESH;
  46.         value=value<<8;
  47.         value+=ADRESL;
  48.         return value;
  49. }
  50. unsigned int ADC_BAT_contiue(void)
  51. {
  52.         unsigned int ADV_MCU[ADC_NUM], ADV_CNT, ADV_ALL;
  53.        
  54.         ADV_ALL=0;
  55.         for(ADV_CNT=0;ADV_CNT<ADC_NUM;ADV_CNT++)
  56.         {
  57.                 ADV_MCU[ADV_CNT]=ADC_BAT_ONE();
  58.         }
  59.         for(ADV_CNT=0;ADV_CNT<ADC_NUM;ADV_CNT++)
  60.         {
  61.                 ADV_ALL+=ADV_MCU[ADV_CNT];
  62.         }
  63.         ADV_ALL=ADV_ALL/ADC_NUM;
  64.         return ADV_ALL;
  65. }
  66. void main()
  67. {
  68.         static bit temp=0;
  69.        
  70.         IO_init();
  71.         delay(1000);
  72.         while(RC3);

  73.         init_fosc();
  74.         init_GPIO();
  75.         init_AD();
  76.         while(1)
  77.         {
  78.                 if(ADC_BAT_contiue()>400)//1.2V
  79.                 {
  80.                         LED=1;
  81.                 }
  82.                 else
  83.                 {
  84.                         LED=0;
  85.                 }
  86.                 if(RC3==1)
  87.                 {
  88.                         while(RC3);
  89.                         {
  90.                                 temp=~temp;
  91.                                 PORTCbits.RC0=temp;
  92.                         }
  93.                 }
  94.                
  95.         }
  96.         //while(1)
  97. }

  98. /*
  99. void main(void)
  100. {
  101. }

  102. */

复制代码
ID:383379 发表于 2018-8-6 13:36
达达达 发表于 2018-8-6 12:28
你的.docx文件打开是乱码

抱歉,可能是因为加密的原因,我是第一次接触单片机,基础很差,单独的两个程序就是不懂的该怎么整合在一起,就是不懂该怎么入手。可以帮我看看吗?谢谢
ID:381818 发表于 2018-8-6 12:28
你的.docx文件打开是乱码
ID:381818 发表于 2018-8-6 12:27
用中断或者if查询,程序都写好了,直接调用相应函数就行了

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表