
本帖最后由 51黑电子会员 于 2020-3-17 09:46 编辑
代码:
- /***实验现象:下载程序后四位数码管显示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;
- }
附件列表