📄 main.c
字号:
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-1 ;
else
value_pas=value_pas*10+1 ;
}
break ;
case 13: //按键2
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-2 ;
else
value_act=value_act*10+2 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-2 ;
else
value_pas=value_pas*10+2 ;
}
break ;
case 12: //按键3
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-3 ;
else
value_act=value_act*10+3 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-3 ;
else
value_pas=value_pas*10+3 ;
}
break ;
case 9: //按键4
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-4 ;
else
value_act=value_act*10+4 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-4 ;
else
value_pas=value_pas*10+4 ;
}
break ;
case 8: //按键5
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-5 ;
else
value_act=value_act*10+5 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-5 ;
else
value_pas=value_pas*10+5 ;
}
break ;
case 7: //按键6
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-6 ;
else
value_act=value_act*10+6 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-6 ;
else
value_pas=value_pas*10+6 ;
}
break ;
case 4: //按键7
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-7 ;
else
value_act=value_act*10+7 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-7 ;
else
value_pas=value_pas*10+7 ;
}
break ;
case 3: //按键8
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-8 ;
else
value_act=value_act*10+8 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-8 ;
else
value_pas=value_pas*10+8 ;
}
break ;
case 2: //按键9
if( value_flag==0 )
{
if( value_act<0 )
value_act=value_act*10-9 ;
else
value_act=value_act*10+9 ;
}
else
{
if( value_pas<0 )
value_pas=value_pas*10-9 ;
else
value_pas=value_pas*10+9 ;
}
break ;
case 18: //按键+/-
if( value_flag==0 )
value_act=0-value_act ;
else
value_pas=0-value_pas ;
break ;
case 15: //按键取余数
value_flag = 1 ;
value_pas = 0 ;
operator = 4 ;
break ;
case 10: //按键开根号 删除一位
if( value_flag==0 )
value_act=value_act/10 ;
else
value_pas=value_pas/10 ;
break ;
case 5: //按键平方
value_flag = 0 ;
value = value_act*value_act ;
value_act = value ;
break ;
case 0: //按键清除
value_flag = 0 ;
value_act = 0 ;
value_pas = 0 ;
break ;
case 16: //按键+
value_flag = 1 ;
value_pas = 0 ;
operator = 0 ;
break ;
case 11: //按键-
value_flag = 1 ;
value_pas = 0 ;
operator = 1 ;
break ;
case 6: //按键*
value_flag = 1 ;
value_pas = 0 ;
operator = 2 ;
break ;
case 1: //按键/
value_flag = 1 ;
value_pas = 0 ;
operator = 3 ;
break ;
case 17: //按键=
value_flag = 0 ;
switch( operator )
{
case 0 : value = value_act+value_pas ; break ;
case 1 : value = value_act-value_pas ; break ;
case 2 : value = value_act*value_pas ; break ;
case 3 : value = value_act/value_pas ; break ;
case 4 : value = value_act%value_pas ; break ;
}
value_act = value ;
break ;
}
}
/*--------------------------------------------------------------------------*/
/* 触摸屏程序 */
/*--------------------------------------------------------------------------*/
void start() //SPI开始
{
DCLK = 0 ;
CS = 1 ;
DIN = 1 ;
DCLK = 1 ;
CS = 0 ;
}
WriteCharTo7843(unsigned char num) //SPI写数据
{
unsigned char count = 0 ;
DCLK = 0 ;
for ( count=0;count<8;count++ )
{
num <<= 1 ;
DIN = CY ;
DCLK = 0; _nop_() ; _nop_() ; _nop_() ; //上升沿有效
DCLK = 1; _nop_() ; _nop_() ; _nop_() ;
}
}
unsigned int ReadFromCharFrom7843 ( void ) //SPI 读数据
{
unsigned char count = 0 ;
unsigned int Num = 0 ;
for ( count=0;count<12;count++ )
{
Num <<= 1 ;
DCLK = 1 ; _nop_() ; _nop_() ; _nop_() ; //下降沿有效
DCLK = 0 ; _nop_() ; _nop_() ; _nop_() ;
if( DOUT ) Num++ ;
}
return ( Num ) ;
}
void Read_ADS7843()
{
int press_flag = 0 ;
delay(1000); //中断后延时以消除抖动,使得采样数据更准确
start(); //启动SPI
//while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
WriteCharTo7843(0x90); //送控制字 10000100 即用12bit、非差分方式读X坐标
//while(BUSY); //如果BUSY信号不好使可以删除不用
delay(2);
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
Y=ReadFromCharFrom7843(); //读X轴坐标
WriteCharTo7843(0xD0); //送控制字 11000100 即用12bit、非差分方式读Y坐标
DCLK=1; _nop_();_nop_();_nop_();_nop_();
DCLK=0; _nop_();_nop_();_nop_();_nop_();
X=ReadFromCharFrom7843(); //读Y轴坐标
CS=1;
if ( flag==1 )
{
if( Y!=4095&&X!=0 )
{
d_x = 127-X/30 ;
d_y = 63-Y/60 ;
drawn_point ( d_x,d_y ) ;
}
}
if ( flag==2 )
{
if( Y!=4095&&X!=0 )
{
while(!PENIR);
if( press_flag==0 )
{
press_flag = 1 ;
calculator_key () ;
calculator_main () ;
if ( value_flag == 0 )
{
display_value ( value_pas,0x88 ) ;
display_value ( value_act,0x98 ) ;
}
else
{
display_value ( value_pas,0x98 ) ;
display_value ( value_act,0x88 ) ;
}
}
}
else
{
press_flag = 0 ;
}
}
}
/*主函数*/
void main ( void )
{
int j ;
init_lcd () ;
display_word(0x92,"初始化...",5);
clr_GDRAM () ;
clr_DDRAM () ;
while ( 1 )
{
scan_key () ;
switch ( flag )
{
case 0 :
display_word(0x91,"画图请按B ",5);
display_word(0x89,"计算器请按C ",6);
break ;
case 1 :
display_word(0x92,"返回请按A ",5);
display_word(0x8a,"清屏请按D ",5);
j = 4 ;
while ( j-- )
delay ( 50000 ) ;
clr_DDRAM () ;
while (1)
{
Read_ADS7843() ;
if ( key_A==0 )
{
flag = 0 ;
display_word(0x91,"返回主菜单",5);
display_word(0x89,"进行中... ",5);
clr_GDRAM () ;
clr_DDRAM () ;
break ;
}
if ( key_D==0 )
{
display_word(0x92,"清屏...",4);
clr_GDRAM () ;
clr_DDRAM () ;
}
}
break ;
case 2 :
clr_DDRAM () ;
while (1)
{
Read_ADS7843() ;
display_word(0x82,"计算器",3);
display_word(0x92,"返回按A ",4);
if ( key_A==0 )
{
flag = 0 ;
//clr_GDRAM () ;
clr_DDRAM () ;
break ;
}
}
}
Read_ADS7843() ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -