下面的是我的程序 我用的是普中開發板
做的是光敏 在1602上顯示
但是我在數碼管上面能正常顯示 但是在 1602上面顯示不了(顯示的是幾條橫杠) 我是個新手 我也不知道怎么辦了 求大佬幫助
我是用的ad芯片是xpt2046 求大佬幫助
#include <REGX51.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rw=P2^5;
sbit lcd_rs=P2^6;
sbit lcd_en=P2^7;
sbit DOUT = P3^7; //輸出
sbit CLK = P3^6; //時鐘
sbit DIN = P3^4; //輸入
sbit CS = P3^5; //片選
uint wan,qian,bai,shi,ge;
uint temp;
uchar data disdata[5];
uint k; //對讀取數據加限制 讓他有時間的讀取
//uchar code table[]={0,1,2,3,4,5,6,7,8,9};
void delay1ms(uint ms)//延時1毫秒(不夠精確的)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++);
}
void write_com(unsigned char com)//寫指令//
{ delay1ms(1);
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=com;
delay1ms(1);
lcd_en=1;
delay1ms(1);
lcd_en=0;
}
void write_dat(unsigned char dat)//寫數據//
{ delay1ms(1);;
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=dat;
delay1ms(1);
lcd_en=1;
delay1ms(1);
lcd_en=0;
}
void lcd_init()//初始化設置//
{
write_com(0x38);delay1ms(5);
write_com(0x08);delay1ms(5);
write_com(0x01);delay1ms(5);
write_com(0x06);delay1ms(5);
write_com(0x0c);delay1ms(5);
}
/****************************************************************************
*函數名:TSPI_Start
*輸 入:無
*輸 出:無
*功 能:初始化觸摸SPI
***************************************************************************/
void init()
{
CLK = 0;
CS = 1;
DIN = 1;
CLK = 1;
CS = 0;
} /*************************lcd1602程序**************************/
/****************************************************************************
*函數名:SPI_Write
*輸 入:dat:寫入數據
*輸 出:無
*功 能:使用SPI寫入數據
****************************************************************************/
void SPI_Write(uchar dat)
{
uchar i;
CLK = 0;
for(i=0; i<8; i++)
{
DIN = dat >> 7; //放置最高位
dat <<= 1;
CLK = 0; //上升沿放置數據
CLK = 1;
}
}
/****************************************************************************
*函數名:SPI_Read
*輸 入:無
*輸 出:dat:讀取 到的數據
*功 能:使用SPI讀取數據
****************************************************************************/
uint SPI_Read(void)
{
uint i, dat=0;
CLK = 0;
for(i=0; i<12; i++) //接收12位數據
{
dat <<= 1;
CLK = 1;
CLK = 0;
dat |= DOUT;
}
return dat;
}
/****************************************************************************
*函數名:Read_AD_Data
*輸 入:cmd:讀取的X或者Y
*輸 出:endValue:最終信號處理后返回的值
*功 能:讀取觸摸數據
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
uchar i;
uint AD_Value;
CLK = 0;
CS = 0;
SPI_Write(cmd);
for(i=6; i>0; i--); //延時等待轉換結果
CLK = 1; //發送一個時鐘周期,清除BUSY
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
AD_Value=SPI_Read();
CS = 1;
return AD_Value;
}
/*******************************************************************************
* 函數名 :datapros()
* 函數功能 :數據處理函數
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void datapros()
{ if(k==15)
{ k=0;
temp = Read_AD_Data(0xa4); // AIN2 光敏電阻
}
k++;
}
/*******************************************************************************
* 函數名 :DigDisplay()
* 函數功能 :數碼管顯示函數
* 輸入 : 無
* 輸出 : 無
*******************************************************************************
void DigDisplay()
{
P2=0xf3;
P0=table[wan];
delay1(2);
P2=0xef;
P0=table[qian];
delay1(2);
P2=0xeb;
P0=table[bai];
delay1(2);
P2=0xc7;
P0=table[shi];
delay1(2);
P2=0xa3;
P0=table[ge];
delay1(2);
}
/***************************/
void guangmin()
{ wan=temp/10000;
qian=(temp/1000)%10;
bai=(temp%1000)/100;
shi=temp%100/10;
ge=temp%10;
write_com(0x80+0x40+0x01);
write_dat(wan);//顯示萬位
write_com(0x80+0x40+0x02);
write_dat(qian);//顯示千位
write_com(0x80+0x40+0x03);
write_dat(bai);//顯示百位
write_com(0x80+0x40+0x04);
write_dat(shi);//顯示十數點
write_com(0x80+0x40+0x05);
write_dat(ge);//顯示個數點
}
/*******************************************************************************
* 函 數 名 : main
*******************************************************************************/
void main()
{ init();
lcd_init();
while(1)
{
datapros(); //數據處理函數
// DigDisplay();
guangmin();
}
}
|