|
主文件 main.c
#include <reg52.h>
#include"xpt2046.h"
#define SMG P0
sbit s1=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;
uchar code smg_duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar Display[4];
void Smg_Display();
void dataproc();
void main()
{
while(1)
{
dataproc(); //对数据处理,转变为显示数组
Smg_Display(); //数组在数码管显示
}
}
void dataproc()
{
static uchar i;
uint RiValue;
i++;
if(i==50)
{
RiValue=read_xpt2046(); //接收12位数据存入RiValue
i=0;
}
Display[0]=smg_duan[RiValue/1000];
Display[1]=smg_duan[RiValue%1000/100];
Display[2]=smg_duan[RiValue%1000%100/10];
Display[3]=smg_duan[RiValue%1000%100%10];
}
void Smg_Display()
{
uchar i;
for(i=0;i<4;i++)
{
switch(i)
{
case 0: s3=0; s2=0; s1=0; break;
case 1: s3=0; s2=0; s1=1; break;
case 2: s3=0; s2=1; s1=0; break;
case 3: s3=0; s2=1; s1=1; break;
}
SMG=Display[i];
delay(100);
SMG=0X00;
}
}
子文件:xpt2046.c
#include"xpt2046.h"
void delay(uint t)
{
while(t--);
}
void xpt2046_Init(uchar cmd)
{
uchar i;
CLK=0;
for(i=0;i<8;i++)
{
Din=cmd>>7;
cmd<<=1;
CLK=0;
CLK=1;
}
}
uint read_xpt2046()
{
uchar i;
uint dat;
CS=0;
CLK=0;
xpt2046_Init(0X94); //写入控制字命令
// for(i=6;i>0;i--);
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=0;
for(i=0;i<12;i++)
{
dat<<=1;
CLK=1;
CLK=0;
dat=dat|Dout;
}
CS=1;
return dat;
}
头文件:xpt2046.h
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Din=P3^4;
sbit CS=P3^5;
sbit CLK=P3^6;
sbit Dout=P3^7;
extern void delay(uint t);
void xpt2046_Init(uchar cmd);
uint read_xpt2046(); |
|