找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 12470|回复: 7
收起左侧

用STC15W408AS单片机实现用触摸屏显示ADC转换的电压值

  [复制链接]
ID:146507 发表于 2018-7-25 11:50 | 显示全部楼层 |阅读模式
在家闲着无聊自己用STC15W408AS做的ADC转换并将结界用触摸屏来显示
用时4天左右,由于自己对STC15系列的不熟悉,在STC官网下载个数据手册学习了一下
其实用STC15系列来做ADC就是要搞清楚ADC初始化,以及ADC读取,我是用触摸屏来显示的并且还要搞清楚串口的初始化以及定时器的初值计算。
具体程序的解释我就不说了,附件里面的注释都表标明了。
原理图是我自己用手画的能看明白就行,希望大家不要介意。
触摸屏的程序编写软件是“USART HMI”软件,要触摸屏显示电压值的话,首先得先编写程序,新建文件在出来的页面里面选择对应的触摸屏型号(本次采用的是TJC3224T024_011的触摸屏),然后再在工具箱窗口选择文本再添加字库保存下载就行,这里说一下触摸屏的下载器是用的STC单片机的下载器就行。

本次用到的元件:
STC下载器
STC15W408AS单片机
滑动电阻器
电源按键
电阻和LED电源指示灯
TJC3224T024_011触摸屏

都是自己原创请大家多多指教

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

电路原理图如下:

原理图

原理图


制作出来的实物图:

触摸屏正面

触摸屏正面

触摸屏反面

触摸屏反面

触摸屏显示的电压值

触摸屏显示的电压值

触摸屏显示的电压值

触摸屏显示的电压值

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

举报

ID:146507 发表于 2018-7-25 11:52 | 显示全部楼层
0.png

附件忘记上传了:
ADC.zip (15.57 MB, 下载次数: 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设置为ADC引脚
  18.         CLK_DIV=0X20;                //ADC结果设置       
  19.         ADC_CONTR=0X80;                //打开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;                //启动ADC电源和设置P1.0口为ADC转换并且540个时钟转换一次
  28.         Delay_ms(1);               
  29.         while(!(ADC_CONTR&0X10));        //等待转换完成
  30.         a=ADC_RES*256+ADC_RESL;                //获取ADC结果
  31.         ADC_CONTR&=~0x10;
  32.         return a;
  33. }
  34. void UartInit()                                //9600bps@11.0592MHz
  35. {
  36.         SCON = 0x50;                //8位数据,可变波特率
  37.         AUXR = 0x14;
  38.         AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
  39.         T2L = 65536-(11059200/4/9600);                //设定定时初值
  40.         T2H = (65536-(11059200/4/9600))>>8;                //设定定时初值
  41. }
  42. void Uartsend_1(unsigned char send)
  43. {
  44.         SBUF=send;                                                //发送数据
  45.         while(!TI);                                                //等待前一帧数据发送完毕
  46.         TI=0;                                                        //复位标志位
  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;        //电压计算
  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--)                        //发送
  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=");//先发送t1.txt=(因为触摸屏显示的格式是(t1.txt="多少V" 最后还要发送三个结束标志 0xff))
  76.                 Uartsend_1(0X22);//' “ '的十六进制数
  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. }

复制代码


回复

举报

ID:599759 发表于 2019-8-13 15:14 | 显示全部楼层
感谢分享
回复

举报

ID:65956 发表于 2019-8-19 14:40 | 显示全部楼层
U1_TX_C("t1.txt=");//先发送t1.txt=(因为触摸屏显示的格式是(t1.txt="多少V" 最后还要发送三个结束标志 0xff))
                Uartsend_1(0X22);//' “ '的十六进制数
                adcnum=ADC_Read();                //读取一次
                Uartsend_adc(adcnum);
                U1_TX_C("V");
                Uartsend_1(0X22);

这段为什么不改为这样直观点

U1_TX_C("t1.txt=");//先发送t1.txt=(因为触摸屏显示的格式是(t1.txt="多少V" 最后还要发送三个结束标志 0xff))
U1_TX_C (“);//' “ '的十六进制数
                adcnum=ADC_Read();                //读取一次
                Uartsend_adc(adcnum);
                U1_TX_C("V");
                U1_TX_C (“);
回复

举报

ID:712985 发表于 2020-3-30 21:44 | 显示全部楼层
excellent . very clear. Thank you so much
回复

举报

ID:585455 发表于 2020-9-23 12:48 | 显示全部楼层
正在學習ADC功能,剛好可以測試,幫助很大。
回复

举报

ID:414556 发表于 2020-10-8 15:39 | 显示全部楼层
对初学者还是很有帮助的
回复

举报

ID:398219 发表于 2022-7-7 18:59 | 显示全部楼层
请问电压计算中506是什么,后面没有标注
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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