久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1794|回復: 3
打印 上一主題 下一主題
收起左側

我用的是PIC16F873芯片為什么這樣配置B口一直輸出低電平呢?求大佬解答

[復制鏈接]
跳轉到指定樓層
樓主
我用的是PIC16F873芯片為什么這樣配置B口一直輸出低電平呢?求大佬解答
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:342822 發表于 2020-9-21 12:51 | 只看該作者
不全用txt格式重發
回復

使用道具 舉報

板凳
ID:712295 發表于 2020-9-21 17:12 | 只看該作者
taotie 發表于 2020-9-21 12:51
不全用txt格式重發

你好
請問能問一下PIC16F873的AD轉換怎么算嘛
回復

使用道具 舉報

地板
ID:155507 發表于 2020-9-21 17:41 | 只看該作者
我給你來個程序試試




  1. #include <pic.h>           //調用PIC16F87XA單片機的頭文件

  2. //根據選項,配置字應該如下所示:
  3. //__CONFIG(HS&WRTEN&WDTDIS&BOREN&PWRTDIS&UNPROTECT&DUNPROT&DEBUGDIS&LVPDIS);

  4. //實際使用中,這樣太麻煩,對于默認選項,我們將其忽略掉:
  5. __CONFIG(HS&WDTDIS&LVPDIS);

  6. //---------------------------------------
  7. //1602液晶相關I/O設置
  8. #define E   RB3            //1602液晶的E腳接在RB3口上
  9. #define RW  RB4            //1602液晶的RW腳接在RB4口上
  10. #define RS  RB5            //1602液晶的RS腳接在RB5口上
  11. //---------------------------------------

  12. //---------------------------------------
  13. //A/D轉換用寄存器設置
  14. unsigned int ADbuf;    //10位A/D轉換,設置16位的unsigend int型寄存器用來暫存A/D轉換結果
  15. //---------------------------------------


  16. void Delay1602(unsigned int t)
  17. {
  18.      unsigned int k;      //定義一個16位寄存器用來做延時用
  19.      for(k=0;k<t;k++);    //延時
  20. }



  21. void LCD1602_busy(void)
  22. {
  23.      TRISD7=1;            //將RD7口設置為輸入口,為讀做準備
  24.      RS=0;                //RS=0、RW=1、E=1時,忙信號輸出到DB7,由RD7讀入
  25.      RW=1;                //RS=0、RW=1、E=1時,忙信號輸出到DB7,由RD7讀入
  26.      E=1;                 //RS=0、RW=1、E=1時,忙信號輸出到DB7,由RD7讀入
  27.      while(RD7==1);       //由RD7讀入1,表示1602液晶忙,需要等待
  28.      E=0;                 //讀完以后,恢復E的電平
  29.      TRISD7=0;            //將RD7口設置為輸出口
  30. }



  31. void LCD1602_Write_com(unsigned char combuf)
  32. {
  33.      RS=0;                //選擇指令寄存器
  34.      RW=0;                //選擇寫狀態
  35.      PORTD=combuf;        //將命令字通過RD口送至DB
  36.      E=1;                 //E高電平將命令字寫入1602液晶
  37.      asm("NOP");          //添加一個空操作,使高電平至少維持1us
  38.      E=0;                 //寫完以后,恢復E的電平
  39. }



  40. void LCD1602_Write_com_busy(unsigned char combuf)
  41. {
  42.      LCD1602_busy();            //調用忙檢測函數
  43.      LCD1602_Write_com(combuf); //調用忙檢測函數
  44. }



  45. void LCD1602_Write_data_busy(unsigned char databuf)
  46. {
  47.      LCD1602_busy();      //調用忙檢測函數
  48.      RS=1;                //選擇數據寄存器
  49.      RW=0;                //選擇寫狀態
  50.      PORTD=databuf;        //將命令字通過RD口送至DB
  51.      E=1;                 //E高電平將命令字寫入1602液晶
  52.      asm("NOP");          //添加一個空操作,使高電平至少維持1us
  53.      E=0;                 //寫完以后,恢復E的電平
  54. }



  55. void LCD1602_Write_address(unsigned char x,unsigned char y)
  56. {
  57.      x&=0x0f;             //列地址限制在0-15間
  58.      y&=0x01;             //行地址限制在0-1間
  59.      if(y==0)             //如果是第一行
  60.          LCD1602_Write_com_busy(x|0x80);        //將列地址寫入
  61.      else                 //如果是第二行
  62.          LCD1602_Write_com_busy((x+0x40)|0x80); //將列地址寫入
  63. }



  64. void LCD1602_init(void)
  65. {
  66.      Delay1602(1500);          //調用延時函數
  67.      LCD1602_Write_com(0x38);  //8位數據總線,兩行顯示模式,5*7點陣顯示
  68.      Delay1602(500);           //調用延時函數
  69.      LCD1602_Write_com(0x38);  //8位數據總線,兩行顯示模式,5*7點陣顯示
  70.      Delay1602(500);           //調用延時函數
  71.      LCD1602_Write_com(0x38);  //8位數據總線,兩行顯示模式,5*7點陣顯示
  72.      LCD1602_Write_com_busy(0x38);  //8位數據總線,兩行顯示模式,5*7點陣顯示
  73.      LCD1602_Write_com_busy(0x08);  //顯示功能關,無光標
  74.      LCD1602_Write_com_busy(0x01);  //清屏
  75.      LCD1602_Write_com_busy(0x06);  //寫入新的數據后,光標右移,顯示屏不移動
  76.      LCD1602_Write_com_busy(0x0C);  //顯示功能開,無光標
  77. }



  78. void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf)
  79. {
  80.      LCD1602_Write_address(x,y);    //先將地址信息寫入
  81.      LCD1602_Write_data_busy(buf);  //再寫入要顯示的數據
  82. }



  83. void main(void)            //主函數,單片機開機后就是從這個函數開始運行
  84. {

  85.     TRISA=0B11111111;      //初始化RA5-RA0的輸入輸出方向
  86.     TRISB=0B11000111;      //初始化RB7-RB0的輸入輸出方向
  87.     TRISD=0B00000000;      //初始化RD7-RD0的輸入輸出方向
  88.     PORTA=0B00000000;      //初始化RA5-RA0數值
  89.     PORTB=0B00000000;      //初始化RB7-RB0的數值
  90.     PORTD=0B00000000;      //初始化RD7-RD0的數值

  91.     LCD1602_init();        //調用1602液晶初始化函數

  92.     //****A/D模塊初始化****
  93.     ADCON1=0B10001110;     //RA0為A/D輸入口;ADFM=1,轉換后數據右移,ADRESL為低8位數據
  94.     ADIE=0;                //禁止A/D中斷
  95.     //*********************

  96.         LCD1602_Disp(2,0,'-');          
  97.         LCD1602_Disp(3,0,'-');                  
  98.         LCD1602_Disp(4,0,'A');
  99.         LCD1602_Disp(5,0,'N');          
  100.         LCD1602_Disp(6,0,'0');
  101.                
  102.         LCD1602_Disp(8,0,'T');
  103.         LCD1602_Disp(9,0,'E');          
  104.         LCD1602_Disp(10,0,'S');                  
  105.         LCD1602_Disp(11,0,'T');
  106.         LCD1602_Disp(12,0,'-');          
  107.         LCD1602_Disp(13,0,'-');

  108.     while(1)               //死循環,單片機初始化后,將一直運行這個死循環
  109.     {

  110.     //***啟動一次A/D轉換***
  111.         ADCON0=0B00000001;     //選擇AN0通道準備進行A/D轉換,啟動A/D模塊
  112.         asm("NOP");            //略做延時
  113.         asm("NOP");            //略做延時
  114.         asm("NOP");            //略做延時
  115.         asm("NOP");            //略做延時
  116.         ADGO=1;                //開始進行A/D轉換
  117.         while(ADGO) continue;  //等待A/D轉換結束
  118.         ADbuf=ADRESH*256+ADRESL;//將10位A/D轉換結果暫存在ADbuf               
  119.     //*********************  
  120.     //*******************************
  121.                 LCD1602_Disp(5,1,'A');          
  122.                 LCD1602_Disp(6,1,'D');                  
  123.                 LCD1602_Disp(7,1,'=');
  124.     //***1602液晶顯示0-255***
  125.                 LCD1602_Disp(8,1,(ADbuf/1000)+'0');       //在第2行的第9列顯示百位
  126.         LCD1602_Disp(9,1,((ADbuf%1000)/100)+'0');       //在第2行的第10列顯示百位
  127.         LCD1602_Disp(10,1,(ADbuf%100)/10+'0'); //在第2行的第11列顯示十位
  128.         LCD1602_Disp(11,1,ADbuf%10+'0');       //在第2行的第12列顯示個位
  129.     //***********************

  130.     }
  131. }
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av黄色在线播放 | 免费同性女女aaa免费网站 | 久久久久久九九九九 | 日本涩涩视频 | 久久三区| 国产精品1区 | 国产极品车模吞精高潮呻吟 | 懂色中文一区二区三区在线视频 | 一区视频在线 | a在线免费观看视频 | 高清视频一区二区三区 | 久久国内| 超碰人人艹 | 色免费看 | 中国黄色在线视频 | 久久香蕉精品视频 | 七七婷婷婷婷精品国产 | 色综合久久天天综合网 | 欧美国产视频 | 精品1区2区 | 成人激情免费视频 | 久久99网| 依人成人| 拍戏被cao翻了h承欢 | av一级久久 | 国产十日韩十欧美 | 精品视频国产 | 全免费a级毛片免费看视频免费下 | 亚洲精品免费视频 | av网址在线| 欧美性一区二区三区 | 97高清国语自产拍 | 亚洲天堂网站 | av一区二区三区 | 久久久久一区 | 可以免费观看的av | 国产一区二区电影 | 亚洲精品一区二区在线 | 国产精品久久久久一区二区三区 | 国产一区视频在线 | 日本精品国产 |