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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2663|回復: 3
收起左側

51單片機數字電壓表

[復制鏈接]
ID:503471 發表于 2019-4-2 18:48 | 顯示全部樓層 |閱讀模式
這是以前制作的東西。 給點幣  我要下載東西啊。謝謝各位大佬
TIM圖片20190402184545.png

數字電壓表.zip

18.13 KB, 下載次數: 24, 下載積分: 黑幣 -5

仿真和hex文件下載(不含代碼)

評分

參與人數 1黑幣 +16 收起 理由
angmall + 16 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:467275 發表于 2019-4-24 22:09
#include<STC12C5A60S2.H>  #define uint   unsigned int  #define uchar unsigned char  sbit CS=P2^0;         //LCD12864串行通信片選  sbit SID=P2^1;         //LCD12864串行通信數據口  sbit SCLK=P2^2;         //LCD12864串行通信同步時鐘信號  sbit PSB=P2^5;         //LCD12864并/串選擇:H并行 L串行   unsigned int temp1,sh1,ge1,n1,m1;  unsigned char ad_result_data[10];   //AD轉換高八位  unsigned char ad_result_low2[10];   //AD轉換低八位  unsigned char ad_result_total[10];   //AD轉換總十位  unsigned char ad_average_result;   //AD轉換十次的平均值  unsigned char Ain,Vin;  unsigned char b,t,R;  char tp=0;  unsigned char code ma1[6]={0xb5,0xe7,0xd1,0xb9,0xa1,0xc3}; //電壓:  unsigned char code ma2[]={"."};  uchar code disp1[]={"提示: 按1 鍵進入"};  uchar code disp2[]={"功能選擇界面. "};  unsigned char code num0[]={0xa3,0xb0};  unsigned char code num1[]={0xa3,0xb1};  unsigned char code num2[]={0xa3,0xb2};  unsigned char code num3[]={0xa3,0xb3};  unsigned char code num4[]={0xa3,0xb4};  unsigned char code num5[]={0xa3,0xb5};  unsigned char code num6[]={0xa3,0xb6};  unsigned char code num7[]={0xa3,0xb7};  unsigned char code num8[]={0xa3,0xb8};  unsigned char code num9[]={0xa3,0xb9};  //-------模塊延時程序---------------------------- 1ms  void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延時1ms  {  uint i,j;   for(;delay1ms>0;delay1ms--)     for(i=0;i<7;i++)       for(j=0;j<210;j++);  }  void delay(uint delay) //STC11F60XE,22.1184M,延時170us  {  uint i,j;  for(;delay>0;delay--)     for(i=0;i<124;i++);       for(j=0;j<124;j++);  }  /*******************************************************                    AD轉換程序  *******************************************************/  void AD_initiate() //初始化函數  {   ES=0;  TMOD=0x21; //定時計數器方式控制寄存器,"自動重裝,16位計數器".  SCON=0x50; //串行控制寄存器,方便在串口助手那觀察  TH1=0xfa;  TL1=0xfa;  TR1=1;  }  void ADC_Power_On()      //AD轉換電  {  ADC_CONTR|=0x80;  delay(5);     //必要的延時  }  void get_ad_result() //取AD結果函數,它是十位AD轉換,每十次平均,最后取低八位作為AD采樣數據  {   uint i,q=0;  for(i=0;i<10;i++)     {         tp=0;         ADC_RES=0;     //高八位數據清零,STC12C5A60S2 AD數據寄存名與STC12C54××系列不同      ADC_RESL=0;    //低兩位清零         ADC_CONTR|=0x08; //啟動AD轉換         while(!tp)     //判斷AD轉換是否完成            {             tp=0x10;             tp&=ADC_CONTR;           }            ADC_CONTR&=0xe7;     ad_average_result=ADC_RES;     q=q+ad_average_result;     }     ad_average_result=q/10;     //ad_average_result=ad_average_result*4*5000/1024;  }  /************************AD轉換結束***********************/   void send_ad_result() //取AD結果函數發送到串口,方便調試  {                    SBUF=n1;     while(TI==0) ;      TI=0;     delay1ms(100);     //SBUF=R>>4;  }   //---------------------電壓采樣程序-------------------------  void caiyangP10()     //測電壓  {  P1M0|=0x01;         //設P1_0為開漏模式 如: P1_0= #00000000B  P1M1|=0x01;  ADC_CONTR=0xe0;   //設置P1.0為輸入AD轉換口  delay(2);  get_ad_result();        //取轉換數據  Vin=ad_average_result;  R=Vin;  }   /*-----------寫控制字到LCD12864------------*/  void write_cmd(uchar cmd)  {  uchar i;  uchar i_data;  i_data=0xf8;          //命令控制字:11111000寫指令 11111010寫數據 11111100讀狀態 11111110讀數據  CS=1;          //片選置高,才能進行讀寫操作  SCLK=0;  /*----------寫命令控制字-----------------*/  for(i=0;i<8;i++)       //循環八次,每次讀取一位數據  {     SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;         //正跳變寫入指令     i_data=i_data<<1;      //左移一位  }        /*---------------------------------------*/  /*----------寫指令高四位-----------------*/  i_data=cmd;  i_data=i_data&0xf0;       //把低四位置0  for(i=0;i<8;i++)       //循環八次,每次讀取一位數據  {         SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;         //正跳變寫入指令     i_data=i_data<<1;      //左移一位  }                   /*---------------------------------------*/  /*----------寫指令低四位-----------------*/  i_data=cmd;  i_data=i_data<<4;       //左移四位,把低四位的數據移到高四位,再把低四位置0  for(i=0;i<8;i++)       //循環八次,每次讀取一位數據  {         SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;        //正跳變寫入指令     i_data=i_data<<1;     //左移一位  }   /*-----------------------------------------*/     CS=0;         //把片選置低  delay1ms(5);       //延時是因為沒有進行忙檢測,適當的延時可以不進行忙檢測  }  /*-----------------------------------------*/  /*------------寫數據到LCD12864-------------*/  void write_dat(uchar dat)  {  uchar i;  uchar i_data;  i_data=0xfa;  CS=1;  for(i=0;i<8;i++)  {     SID=(bit)(i_data&0x80);     SCLK=0;     SCLK=1;     i_data=i_data<<1;  }  i_data=dat;  i_data=i_data&0xf0;  for(i=0;i<8;i++)  {         SID=(bit)(i_data&0x80);     SCLK=0;     SCLK=1;     i_data=i_data<<1;  }  i_data=dat;  i_data=i_data<<4;  for(i=0;i<8;i++)  {         SID=(bit)(i_data&0x80);     SCLK=0;     SCLK=1;     i_data=i_data<<1;  }  CS=0;  delay1ms(5);  }  /*-----------------------------------------*/  /*--------------顯示坐標-------------------*/  void lcd_pos(uchar x,uchar y)      //漢字顯示坐標,x為哪一行,y為哪一列  {  uchar pos;  if(x==0)     x=0x80;         //第一行  else if(x==1)     x=0x90;         //第二行  else if(x==2)     x=0x88;         //第三行  else if(x==3)     x=0x98;         //第四行  pos=x+y;         //顯示哪一行(總共有4行)哪一豎(總共有8豎,每16列為1豎)  write_cmd(pos);  }  /*-----------------------------------------*/  /*--------------顯示8個漢字-------------------*/  void disp_hanzi(uchar code *chn)  {     uchar i;     write_cmd(0x30);    //基本指令操作方式     for(i=0;i<16;i++)   //16列*8個漢字=128(剛好)         write_dat(chn);  }  /*-----------------------------------------*/  /*--------------顯示數字-------------------*/  void disp_num(uchar code *chn)  {  uchar i;     write_cmd(0x30);    //基本指令操作方式     for(i=0;i<2;i++)      //1個數字         write_dat(chn);  }  void disp_number(uchar num)  {          switch(num)     {  case 0: disp_num(num0);break;  case 1: disp_num(num1);break;  case 2: disp_num(num2);break;  case 3: disp_num(num3);break;  case 4: disp_num(num4);break;  case 5: disp_num(num5);break;       case 6: disp_num(num6);break;  case 7: disp_num(num7);break;  case 8: disp_num(num8);break;  case 9: disp_num(num9);break;  default: break;     }  }  /*----------- --LCD初始化------------------*/  void lcd_init()  {  PSB=0;  write_cmd(0x30);       //基本指令  write_cmd(0x02);       //地址歸位  write_cmd(0x06);       //游標右移  write_cmd(0x0c);       //整體顯示  write_cmd(0x01);       //清屏  }  /*-----------------------------------------*/  void displayP10()  {  float ad1;  //unsigned int temp1,sh1,ge1,n1,m1;  //uchar code dis2[]={0x01,0x02,0x00};   //ad1=x*7.8125;   //電壓修正  uchar i;  ad1=Vin*3.9608;   //具體線性參數由輸入電壓值調整,該值的測量范圍為0-10.00V,5V左右的測量比較準確,                        //兩端的最大誤差為70mv,其他一般在40mv以內  temp1=(int)ad1;  sh1=temp1/1000;    //十位  ge1=(temp1%1000)/100;   //個位  n1=((temp1%1000)%100)/10; //小數點后一位  m1=((temp1%1000)%100)%10; //小數點后二位  //write_cmd(0x01);   write_cmd(0x30);    //基本指令操作方式   lcd_pos(0,0);      for(i=0;i<6;i++)        write_dat(ma1);           lcd_pos(0,3);  disp_number(sh1);  lcd_pos(0,4);  disp_number(ge1);  lcd_pos(0,5);  for(i=0;i<2;i++)    write_dat(ma2);  lcd_pos(0,6);  disp_number(n1);  lcd_pos(0,7);  disp_number(m1);  /*lcd_pos(2,0);  disp_hanzi(disp1);  lcd_pos(3,0);  disp_hanzi(disp2);*/  }  void main()  {        EA=1;  AD_initiate();   //初始化   ADC_Power_On();     //開AD電源  //init();  lcd_init();  delay(10);  while(1)  {               caiyangP10();    //測電壓       send_ad_result();     //Vin=Vin*4007;     displayP10();     delay(10);  }  }  參考鏈接:http://www.picavr.com/news/2010-11/2388.htm

ID:1138740 發表于 2024-12-6 03:20 | 顯示全部樓層
老哥,能把c代碼也分享下嗎
回復

使用道具 舉報

ID:1138740 發表于 2024-12-6 03:20 | 顯示全部樓層
老哥,能把c代碼也發出來嗎
回復

使用道具 舉報

ID:1138740 發表于 2024-12-6 05:40 | 顯示全部樓層
源代碼可以發嗎,可加黑幣老哥
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品欧美一区二区蜜桃免费 | 亚洲三级在线观看 | 久久99国产精品 | aaa精品| 欧美久久久久 | av天天操 | 欧美性猛交 | 国产欧美一区二区三区在线看 | 久久久久国产精品一区二区 | 亚洲 欧美 日韩在线 | av在线成人 | 久久99深爱久久99精品 | 成人精品| 日本久久网 | 久久久www成人免费无遮挡大片 | 欧洲亚洲精品久久久久 | 色就干| 在线午夜 | 日韩欧美专区 | 久久久久久毛片免费观看 | 91日韩在线 | 国产成人短视频在线观看 | 免费视频一区二区三区在线观看 | 日本中文字幕在线视频 | 国产成人jvid在线播放 | 久热免费| 91精品国产色综合久久 | 一级做a| 99久久久久 | 国产在线一区观看 | 欧美午夜一区 | 亚洲国产精品久久久久婷婷老年 | 91精品国产综合久久久久蜜臀 | 亚洲国产视频一区 | 日本91av视频| 不卡视频一区 | 久久国产高清视频 | 国产精品视频中文字幕 | 粉嫩av久久一区二区三区 | 成人国产免费观看 | 极品粉嫩国产48尤物在线播放 |