老师你好:
程序写入芯片后触摸屏程序正常,但是peizhi()子程序aa2乱码,加不了
减不了。请老师指点一下,那有错误。
裴京
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uint x;
uint y;
uchar SEG2[16]={0x30,0x31,0x32,0x33,
0x34,0x35,0x36,0x37,0x38,0x39,0x41,
0x42,0x43,0x44,0x45,0x46};
uchar ab1,ab2,ab3,ab4,ab5,ab6;
uchar ac1,ac2,ac3,ac4,ac5,ac6;
uchar ad1,ad2,ad3,ad4;
uchar ae1,ae2,ae3,ae4;
uint aa2,aa4;
uint xl,xh;
uint yl,yh;
//-------------------------
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
//-------------------------------
void smalldelay(unsigned char tmp)
{
unsigned char i;
while(tmp--)
{
for(i = 0; i < 250; i++)
{
NOP();
}
}
}
//===================================
void chushihua() //LCD
{
DDRA=0XFF;
DDRD|=BIT(4)|BIT(5)|BIT(6);
PORTD&=~BIT(6);
}
//--------------------------
void spiinit(void) //7843
{
DDRB|=BIT(PB4)|BIT(PB5)|BIT(PB7); // MOSI and SCK port out
DDRB&=~BIT(PB6);
PORTB|=BIT(PB6);
PORTB|=BIT(PB4);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (0 << CPOL)| (0 << CPHA)| (1 << SPR1)| (1 << SPR0); // enable spi,master mode, MCLK/4,spi 0 mode
}
//-----------------------------
/*
void portini(void)
{
//spiinit();
//sendspi();
DDRD &= ~(1 << PD3); // port input
PORTD |= (1 << PD3); // pull-up resistance
//MCUCR |= 1<<ISC11; // down edge enable
GICR |= 1<<INT1; // extern interrupt 1 enable
flgtouch = 0;
}*/
//---------------------------
void chushihua1()
{
write_com(0X38);
delay(1);
write_com(0X01);
delay(1);
write_com(0X0C);
delay(1);
write_com(0X06);
delay(1);
}
//-------------------------
void sendspi(unsigned char data)
{
PORTB&=~BIT(PB4);
SPDR = data; // send data
while( !(SPSR & (1 << SPIF)) ); // wait data transfer end
//PORTB|=BIT(PB4);
}
//--------------------------
unsigned char readspi(void)
{
//PORTB&=~BIT(PB4);
SPSR = 0x00;
while( !(SPSR & (1 << SPIF)) );
return SPDR;
PORTB|=BIT(PB4);
}
//--------------------------
void keydown()
{
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (0 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
sendspi(0x9B);
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (1 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
xl = readspi();
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (0 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
sendspi(0x9B);
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (1 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
xh = readspi();
smalldelay(20);
x = xl+xh*256;
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (0 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
sendspi(0xDB);
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (1 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
yl = readspi();
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (0 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
sendspi(0xDB);
smalldelay(20);
SPCR = (1 << SPE) | (0 << DORD)| (1 << MSTR) | (1 << CPOL)| (0 << CPHA)| (0 << SPR1)| (1 << SPR0);
yh = readspi();
smalldelay(20);
y = yl+yh*256;
}
//===========================
void write_com(uchar com)
{
PORTD&=~BIT(4);
PORTD&=~BIT(5);
PORTA=com;
PORTD|=BIT(6);
delay(1);
PORTD&=~BIT(6);
}
//--------------------------
void write_dat(uchar dat)
{
PORTD|=BIT(4);
PORTD&=~BIT(5);
PORTA=dat;
PORTD|=BIT(6);
delay(1);
PORTD&=~BIT(6);
}
//--------------------------
/*
void zhuanhuan()
{ uint aa1,aa2,aa3,aa4;
aa1=xl;
aa2=xh;
ab1=aa1/100;
ab2=(aa1%100)/10;
ab3=aa1%10;
ab4=aa2/100;
ab5=(aa2%100)/10;
ab6=aa2%10;
aa3=yl;
aa4=yh;
ac1=aa3/100;
ac2=(aa3%100)/10;
ac3=aa3%10;
ac4=aa4/100;
ac5=(aa4%100)/10;
ac6=aa4%10;
ad1 = aa2/1000;
ad2 = (aa2%1000)/100;
ad3 = (aa2%100)/10;
ad4 = aa2%10;
ae1 = aa4/1000;
ae2 = (aa4%1000)/100;
ae3 = (aa4%100)/10;
ae4 = aa4%10;
}*/
//--------------------------
void zhuanhuan()
{
uint aa1,aa2,aa3,aa4;
//aa1 = positionxl;
aa1 = x;
ab1 = aa1/100000;
ab2 = (aa1%100000)/10000;
ab3 = (aa1%10000)/1000;
ab4 = (aa1%1000)/100;
ab5 = (aa1%100)/10;
ab6 = aa1%10;
//aa3 = positionyl;
aa3 = y;
ac1 = aa3/100000;
ac2 = (aa3%100000)/10000;
ac3 = (aa3%10000)/1000;
ac4 = (aa3%1000)/100;
ac5 = (aa3%100)/10;
ac6 = aa3%10;
ad1 = aa2/1000;
ad2 = (aa2%1000)/100;
ad3 = (aa2%100)/10;
ad4 = aa2%10;
ae1 = aa4/1000;
ae2 = (aa4%1000)/100;
ae3 = (aa4%100)/10;
ae4 = aa4%10;
}
//--------------------------
void xianshi()
{
uchar i;
write_com(0X80);
delay(1);
write_dat(SEG2[ab1]);
delay(1);
write_dat(SEG2[ab2]);
delay(1);
write_dat(SEG2[ab3]);
delay(1);
write_dat(SEG2[ab4]);
delay(1);
write_dat(SEG2[ab5]);
delay(1);
write_dat(SEG2[ab6]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[ad1]);
delay(1);
write_dat(SEG2[ad2]);
delay(1);
write_dat(SEG2[ad3]);
delay(1);
write_dat(SEG2[ad4]);
delay(1);
write_com(0X90);
delay(1);
write_dat(SEG2[ac1]);
delay(1);
write_dat(SEG2[ac2]);
delay(1);
write_dat(SEG2[ac3]);
delay(1);
write_dat(SEG2[ac4]);
delay(1);
write_dat(SEG2[ac5]);
delay(1);
write_dat(SEG2[ac6]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[ae1]);
delay(1);
write_dat(SEG2[ae2]);
delay(1);
write_dat(SEG2[ae3]);
delay(1);
write_dat(SEG2[ae4]);
delay(1);
write_com(0X88);
delay(1);
write_dat(0xd7);
delay(1);
write_dat(0xa2);
delay(1);
write_dat(0xb2);
delay(1);
write_dat(0xe1);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(0x1e);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(0x1f);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_com(0X98);
delay(1);
write_dat(0xc9);
delay(1);
write_dat(0xbe);
delay(1);
write_dat(0xb3);
delay(1);
write_dat(0xfd);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(0x1e);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
write_dat(0x1f);
delay(1);
write_dat(SEG2[0x0e]);
delay(1);
}
//--------------------------
void peizhi()
{
uchar a,b;
if(x==56283) //删除 加
{
if(y==56283)
{
if(aa2<120)
{
aa2++;
}
else
{
aa2=0;
}
}
}
//-------------
if(x==56540) //删除 加
{
if(yl==56540)
{
if(aa2>0)
{
aa2--;
}
else
{
aa2=120;
}
}
}
}
//--------------------------
void main()
{
delay(200); // delay wait tranquilization
chushihua();
spiinit();
chushihua();
chushihua1();
sendspi(0x00);
smalldelay(20);
aa2=50;
aa4=60;
while(1)
{
peizhi();
keydown();
zhuanhuan();
xianshi();
}
}
此帖出自
小平头技术问答
一周热门 更多>