• 利用XPT2046芯片转换电位器模拟值为数码管显示数值的项目工程


    /***实验现象:下载程序后四位数码管显示XPT2046芯片转换电位器模拟值,范围是0-4096,一般达不到最大4096,这个受你供电电压的影响。还有就是数码管个位出现数字跳动,是源于程序中编写了每50下读取XPT2046芯片转换电位器模拟值,一是避免XPT2046芯片转换电位器模拟量为数字跳动太快,二是体现了XPT2046芯片在进行转换电位器模拟值。***/
    #include <reg52.h>
    #include<intrins.h>
    #define uint unsigned int 
    #define uchar unsigned char
    #define GPIO_DUAN P3
    uchar table[]={0x3f, 0x06, 0x5b, 0x4f,0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c,0x39, 0x5e, 0x79, 0x71};
    uchar DisplayData[5];
    sbit HCA = P2^2;//HCA,HCB,HCC是利用了74HC138译码器来进行位选,我们动态位选了4位
    sbit HCB = P2^3;
    sbit HCC = P2^4;
    sbit CLK  = P1^0;
    sbit CS   = P1^1;
    sbit DIN  = P1^2;
    sbit DOUT = P1^3;
    void DisplayDS();
    void delayms(uint xms);
    uint Read_AD_Data(uchar moshi);
    void SPI_Write(uchar moshi);
    uint GetValue();
      void main()
    {
       uint temp, cnt = 50;
       while(1)
      {
        if(cnt == 50)//每50下读取转换值,避免数字跳动太快
       {
         temp = Read_AD_Data(0x94);
         cnt = 0;
        }
        cnt++;
        DisplayData[0] = table[temp/1000];
        DisplayData[1] = table[temp%1000/100];
        DisplayData[2] = table[temp%100/10];
        DisplayData[3] = table[temp%10];
        DisplayDS();
       }
    }
      void DisplayDS()//动态扫描函数
    {
       uint i;
       for(i = 0; i < 4; i++)
     {
        GPIO_DUAN = 0x00;
        switch(i)
      {
         case 0 : 
                 HCC = 0; HCB = 0; HCA = 0; 
                 break;
         case 1 : 
                 HCC = 0; HCB = 0; HCA = 1; 
                 break;
         case 2 : 
                 HCC = 0; HCB = 1; HCA = 0; 
                 break;
         case 3 : 
                 HCC = 0; HCB = 1; HCA = 1; 
                 break;
        }    
        GPIO_DUAN = DisplayData[i];
        delayms(1);
      }
    }
      void delayms(uint xms)
    {
       uint i, j;
       for(i = 0; i < xms; i++)
        for(j = 0; j < 110; j++);
     }
      uint Read_AD_Data(uchar moshi)//读取最终的数字量函数
    {
       uint i, ans;
       SPI_Write(moshi);    
       for(i = 0; i < 5; i++);
       CLK = 1;
       _nop_();
       _nop_();
       CLK = 0;
       _nop_();
       _nop_(); 
       ans = GetValue();
       CS = 1;
       return ans;
     }
      void SPI_Write(uchar moshi)//写模式函数
    {
       uint i;
       CS = 0;
       for(i = 0; i < 8; i++)
     {    
        CLK = 0;
        DIN = moshi>>7;
        CLK = 1;
        moshi <<= 1;
       }
       CLK = 0;
     }
      uint GetValue()//读取DOUT管脚,得到最终数字量函数。
    {
       uint i, ans = 0;
       for(i = 0; i < 12; i++)
     {
        CLK = 0;
        ans <<= 1;
        ans |= DOUT;
        CLK = 1;
       }
       CLK = 0;
       return ans;
     }
  • 相关阅读:
    nginx 代理第三方邮件站点
    mysql启动报错ERROR! The server quit without updating PID file处理
    configure: error: C compiler cannot create executables报错处理
    nginx在反向代理侧实现ssl
    connect() failed (111: Connection refused) while connecting to upstream报错处理
    FastCGI sent in stderr: "Access to the script 'XXX' has been denied (see security.limit_extensions)" 报错处理
    MySQL5.7彻底取消主从复制
    运维三宝
    mailx发邮件报错Error initializing NSS: Unknown error -8015. . . . message not sent.处理
    褚时健:活着是为了什么?
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12496885.html
Copyright © 2020-2023  润新知