找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2684|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)數(shù)字電壓表

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是以前制作的東西。 給點(diǎn)幣  我要下載東西啊。謝謝各位大佬

TIM圖片20190402184545.png (80.39 KB, 下載次數(shù): 20)

TIM圖片20190402184545.png

數(shù)字電壓表.zip

18.13 KB, 下載次數(shù): 24, 下載積分: 黑幣 -5

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

評(píng)分

參與人數(shù) 1黑幣 +16 收起 理由
angmall + 16 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:467275 發(fā)表于 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串行通信數(shù)據(jù)口  sbit SCLK=P2^2;         //LCD12864串行通信同步時(shí)鐘信號(hào)  sbit PSB=P2^5;         //LCD12864并/串選擇:H并行 L串行   unsigned int temp1,sh1,ge1,n1,m1;  unsigned char ad_result_data[10];   //AD轉(zhuǎn)換高八位  unsigned char ad_result_low2[10];   //AD轉(zhuǎn)換低八位  unsigned char ad_result_total[10];   //AD轉(zhuǎn)換總十位  unsigned char ad_average_result;   //AD轉(zhuǎn)換十次的平均值  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 鍵進(jìn)入"};  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};  //-------模塊延時(shí)程序---------------------------- 1ms  void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延時(shí)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,延時(shí)170us  {  uint i,j;  for(;delay>0;delay--)     for(i=0;i<124;i++);       for(j=0;j<124;j++);  }  /*******************************************************                    AD轉(zhuǎn)換程序  *******************************************************/  void AD_initiate() //初始化函數(shù)  {   ES=0;  TMOD=0x21; //定時(shí)計(jì)數(shù)器方式控制寄存器,"自動(dòng)重裝,16位計(jì)數(shù)器".  SCON=0x50; //串行控制寄存器,方便在串口助手那觀察  TH1=0xfa;  TL1=0xfa;  TR1=1;  }  void ADC_Power_On()      //AD轉(zhuǎn)換電  {  ADC_CONTR|=0x80;  delay(5);     //必要的延時(shí)  }  void get_ad_result() //取AD結(jié)果函數(shù),它是十位AD轉(zhuǎn)換,每十次平均,最后取低八位作為AD采樣數(shù)據(jù)  {   uint i,q=0;  for(i=0;i<10;i++)     {         tp=0;         ADC_RES=0;     //高八位數(shù)據(jù)清零,STC12C5A60S2 AD數(shù)據(jù)寄存名與STC12C54××系列不同      ADC_RESL=0;    //低兩位清零         ADC_CONTR|=0x08; //啟動(dòng)AD轉(zhuǎn)換         while(!tp)     //判斷AD轉(zhuǎn)換是否完成            {             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轉(zhuǎn)換結(jié)束***********************/   void send_ad_result() //取AD結(jié)果函數(shù)發(fā)送到串口,方便調(diào)試  {                    SBUF=n1;     while(TI==0) ;      TI=0;     delay1ms(100);     //SBUF=R>>4;  }   //---------------------電壓采樣程序-------------------------  void caiyangP10()     //測(cè)電壓  {  P1M0|=0x01;         //設(shè)P1_0為開(kāi)漏模式 如: P1_0= #00000000B  P1M1|=0x01;  ADC_CONTR=0xe0;   //設(shè)置P1.0為輸入AD轉(zhuǎn)換口  delay(2);  get_ad_result();        //取轉(zhuǎn)換數(shù)據(jù)  Vin=ad_average_result;  R=Vin;  }   /*-----------寫(xiě)控制字到LCD12864------------*/  void write_cmd(uchar cmd)  {  uchar i;  uchar i_data;  i_data=0xf8;          //命令控制字:11111000寫(xiě)指令 11111010寫(xiě)數(shù)據(jù) 11111100讀狀態(tài) 11111110讀數(shù)據(jù)  CS=1;          //片選置高,才能進(jìn)行讀寫(xiě)操作  SCLK=0;  /*----------寫(xiě)命令控制字-----------------*/  for(i=0;i<8;i++)       //循環(huán)八次,每次讀取一位數(shù)據(jù)  {     SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;         //正跳變寫(xiě)入指令     i_data=i_data<<1;      //左移一位  }        /*---------------------------------------*/  /*----------寫(xiě)指令高四位-----------------*/  i_data=cmd;  i_data=i_data&0xf0;       //把低四位置0  for(i=0;i<8;i++)       //循環(huán)八次,每次讀取一位數(shù)據(jù)  {         SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;         //正跳變寫(xiě)入指令     i_data=i_data<<1;      //左移一位  }                   /*---------------------------------------*/  /*----------寫(xiě)指令低四位-----------------*/  i_data=cmd;  i_data=i_data<<4;       //左移四位,把低四位的數(shù)據(jù)移到高四位,再把低四位置0  for(i=0;i<8;i++)       //循環(huán)八次,每次讀取一位數(shù)據(jù)  {         SID=(bit)(i_data&0x80);     //bit表示取其最高位     SCLK=0;     SCLK=1;        //正跳變寫(xiě)入指令     i_data=i_data<<1;     //左移一位  }   /*-----------------------------------------*/     CS=0;         //把片選置低  delay1ms(5);       //延時(shí)是因?yàn)闆](méi)有進(jìn)行忙檢測(cè),適當(dāng)?shù)难訒r(shí)可以不進(jìn)行忙檢測(cè)  }  /*-----------------------------------------*/  /*------------寫(xiě)數(shù)據(jù)到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);  }  /*-----------------------------------------*/  /*--------------顯示坐標(biāo)-------------------*/  void lcd_pos(uchar x,uchar y)      //漢字顯示坐標(biāo),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個(gè)漢字-------------------*/  void disp_hanzi(uchar code *chn)  {     uchar i;     write_cmd(0x30);    //基本指令操作方式     for(i=0;i<16;i++)   //16列*8個(gè)漢字=128(剛好)         write_dat(chn);  }  /*-----------------------------------------*/  /*--------------顯示數(shù)字-------------------*/  void disp_num(uchar code *chn)  {  uchar i;     write_cmd(0x30);    //基本指令操作方式     for(i=0;i<2;i++)      //1個(gè)數(shù)字         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);       //游標(biāo)右移  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;   //具體線性參數(shù)由輸入電壓值調(diào)整,該值的測(cè)量范圍為0-10.00V,5V左右的測(cè)量比較準(zhǔn)確,                        //兩端的最大誤差為70mv,其他一般在40mv以?xún)?nèi)  temp1=(int)ad1;  sh1=temp1/1000;    //十位  ge1=(temp1%1000)/100;   //個(gè)位  n1=((temp1%1000)%100)/10; //小數(shù)點(diǎn)后一位  m1=((temp1%1000)%100)%10; //小數(shù)點(diǎn)后二位  //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();     //開(kāi)AD電源  //init();  lcd_init();  delay(10);  while(1)  {               caiyangP10();    //測(cè)電壓       send_ad_result();     //Vin=Vin*4007;     displayP10();     delay(10);  }  }  參考鏈接:http://www.picavr.com/news/2010-11/2388.htm

板凳
ID:1138740 發(fā)表于 2024-12-6 03:20 | 只看該作者
老哥,能把c代碼也分享下嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:1138740 發(fā)表于 2024-12-6 03:20 | 只看該作者
老哥,能把c代碼也發(fā)出來(lái)嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1138740 發(fā)表于 2024-12-6 05:40 | 只看該作者
源代碼可以發(fā)嗎,可加黑幣老哥
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表