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

QQ登錄

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

帖子
查看: 12343|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

用STC15W408AS單片機(jī)實(shí)現(xiàn)用觸摸屏顯示ADC轉(zhuǎn)換的電壓值

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在家閑著無(wú)聊自己用STC15W408AS做的ADC轉(zhuǎn)換并將結(jié)界用觸摸屏來(lái)顯示
用時(shí)4天左右,由于自己對(duì)STC15系列的不熟悉,在STC官網(wǎng)下載個(gè)數(shù)據(jù)手冊(cè)學(xué)習(xí)了一下
其實(shí)用STC15系列來(lái)做ADC就是要搞清楚ADC初始化,以及ADC讀取,我是用觸摸屏來(lái)顯示的并且還要搞清楚串口的初始化以及定時(shí)器的初值計(jì)算。
具體程序的解釋我就不說(shuō)了,附件里面的注釋都表標(biāo)明了。
原理圖是我自己用手畫(huà)的能看明白就行,希望大家不要介意。
觸摸屏的程序編寫(xiě)軟件是“USART HMI”軟件,要觸摸屏顯示電壓值的話,首先得先編寫(xiě)程序,新建文件在出來(lái)的頁(yè)面里面選擇對(duì)應(yīng)的觸摸屏型號(hào)(本次采用的是TJC3224T024_011的觸摸屏),然后再在工具箱窗口選擇文本再添加字庫(kù)保存下載就行,這里說(shuō)一下觸摸屏的下載器是用的STC單片機(jī)的下載器就行。

本次用到的元件:
STC下載器
STC15W408AS單片機(jī)
滑動(dòng)電阻器
電源按鍵
電阻和LED電源指示燈
TJC3224T024_011觸摸屏

都是自己原創(chuàng)請(qǐng)大家多多指教

附件里面包含了ADC程序和觸摸屏的程序以及觸摸屏的軟件。

電路原理圖如下:


制作出來(lái)的實(shí)物圖:

IMG_20180725_103335.jpg (2.69 MB, 下載次數(shù): 148)

觸摸屏正面

觸摸屏正面

IMG_20180725_103338.jpg (2.96 MB, 下載次數(shù): 133)

觸摸屏反面

觸摸屏反面

IMG_20180725_103346.jpg (3.01 MB, 下載次數(shù): 135)

觸摸屏顯示的電壓值

觸摸屏顯示的電壓值

IMG_20180725_103356.jpg (2.39 MB, 下載次數(shù): 134)

觸摸屏顯示的電壓值

觸摸屏顯示的電壓值

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:146507 發(fā)表于 2018-7-25 11:52 | 只看該作者


附件忘記上傳了:
ADC.zip (15.57 MB, 下載次數(shù): 204)

  1. #include<STC15WXX.H>
  2. #include<intrins.h>
  3. void Delay_ms(unsigned int ms)
  4. {
  5.         unsigned int a,b;
  6.         for(a=ms;a>0;)
  7.         {
  8.                 for(b=1000;b>0;)
  9.                 {
  10.                 b=b-1;
  11.                 }
  12.                 a--;
  13.         }
  14. }
  15. void ADC_int()                //ADc初始化
  16. {
  17.         P1ASF=0X01;                        //吧P1.0設(shè)置為ADC引腳
  18.         CLK_DIV=0X20;                //ADC結(jié)果設(shè)置       
  19.         ADC_CONTR=0X80;                //打開(kāi)ADC 電源
  20.         ADC_RESL=0;                                                                       
  21.         ADC_RES=0;
  22.         Delay_ms(10);
  23. }
  24. unsigned int ADC_Read()                //讀ADCCH6
  25. {
  26.         unsigned int a=0;
  27.         ADC_CONTR = 0X88;                //啟動(dòng)ADC電源和設(shè)置P1.0口為ADC轉(zhuǎn)換并且540個(gè)時(shí)鐘轉(zhuǎn)換一次
  28.         Delay_ms(1);               
  29.         while(!(ADC_CONTR&0X10));        //等待轉(zhuǎn)換完成
  30.         a=ADC_RES*256+ADC_RESL;                //獲取ADC結(jié)果
  31.         ADC_CONTR&=~0x10;
  32.         return a;
  33. }
  34. void UartInit()                                //9600bps@11.0592MHz
  35. {
  36.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  37.         AUXR = 0x14;
  38.         AUXR |= 0x01;                //串口1選擇定時(shí)器2為波特率發(fā)生器
  39.         T2L = 65536-(11059200/4/9600);                //設(shè)定定時(shí)初值
  40.         T2H = (65536-(11059200/4/9600))>>8;                //設(shè)定定時(shí)初值
  41. }
  42. void Uartsend_1(unsigned char send)
  43. {
  44.         SBUF=send;                                                //發(fā)送數(shù)據(jù)
  45.         while(!TI);                                                //等待前一幀數(shù)據(jù)發(fā)送完畢
  46.         TI=0;                                                        //復(fù)位標(biāo)志位
  47. }
  48. void U1_TX_C(char *send)
  49. {
  50.         unsigned char a=0;
  51.         while(send[a])
  52.         {
  53.          Uartsend_1(send[a]);
  54.          a++;
  55.         }
  56. }
  57. void Uartsend_adc(unsigned long send)
  58. {
  59.     unsigned char a[4],b;
  60.           send=send*506/1024;        //電壓計(jì)算
  61.            a[0]=send%10+'0';               
  62.            a[1]=send/10%10+'0';               
  63.         a[2]='.';                                       
  64.            a[3]=send/100+'0';         
  65.    for(b=4;b>0;b--)                        //發(fā)送
  66.    Uartsend_1(a[b-1]);                //
  67. }
  68. void main()
  69. {
  70.         unsigned int adcnum;
  71.         ADC_int();                //ADc初始化
  72.         UartInit();                                //9600bps@11.0592MHz
  73.   while(1)
  74.         {
  75.                 U1_TX_C("t1.txt=");//先發(fā)送t1.txt=(因?yàn)橛|摸屏顯示的格式是(t1.txt="多少V" 最后還要發(fā)送三個(gè)結(jié)束標(biāo)志 0xff))
  76.                 Uartsend_1(0X22);//' “ '的十六進(jìn)制數(shù)
  77.                 adcnum=ADC_Read();                //讀取一次
  78.                 Uartsend_adc(adcnum);
  79.                 U1_TX_C("V");
  80.                 Uartsend_1(0X22);
  81.                 Uartsend_1(0Xff);
  82.                 Uartsend_1(0Xff);
  83.                 Uartsend_1(0Xff);
  84.                 Delay_ms(1000);
  85.         }
  86. }

復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

板凳
ID:599759 發(fā)表于 2019-8-13 15:14 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報(bào)

地板
ID:65956 發(fā)表于 2019-8-19 14:40 | 只看該作者
U1_TX_C("t1.txt=");//先發(fā)送t1.txt=(因?yàn)橛|摸屏顯示的格式是(t1.txt="多少V" 最后還要發(fā)送三個(gè)結(jié)束標(biāo)志 0xff))
                Uartsend_1(0X22);//' “ '的十六進(jìn)制數(shù)
                adcnum=ADC_Read();                //讀取一次
                Uartsend_adc(adcnum);
                U1_TX_C("V");
                Uartsend_1(0X22);

這段為什么不改為這樣直觀點(diǎn)

U1_TX_C("t1.txt=");//先發(fā)送t1.txt=(因?yàn)橛|摸屏顯示的格式是(t1.txt="多少V" 最后還要發(fā)送三個(gè)結(jié)束標(biāo)志 0xff))
U1_TX_C (“);//' “ '的十六進(jìn)制數(shù)
                adcnum=ADC_Read();                //讀取一次
                Uartsend_adc(adcnum);
                U1_TX_C("V");
                U1_TX_C (“);
回復(fù)

使用道具 舉報(bào)

5#
ID:712985 發(fā)表于 2020-3-30 21:44 | 只看該作者
excellent . very clear. Thank you so much
回復(fù)

使用道具 舉報(bào)

6#
ID:585455 發(fā)表于 2020-9-23 12:48 | 只看該作者
正在學(xué)習(xí)ADC功能,剛好可以測(cè)試,幫助很大。
回復(fù)

使用道具 舉報(bào)

7#
ID:414556 發(fā)表于 2020-10-8 15:39 | 只看該作者
對(duì)初學(xué)者還是很有幫助的
回復(fù)

使用道具 舉報(bào)

8#
ID:398219 發(fā)表于 2022-7-7 18:59 | 只看該作者
請(qǐng)問(wèn)電壓計(jì)算中506是什么,后面沒(méi)有標(biāo)注
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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