/***原子开发板LCD显示屏编译测试***********************/
/***显示一个正数和显示一个负数*2018 3 3 PAST******/
/***L155 CODE 14722 ****************/
#include <stm32f10x.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "text.h"
#include "24cxx.h"
u8 i,j,k,l,m,n; //
u16 p1,p2,p3;
const u8 disdt[]={48,49,50,51,52,53,54,55,56,57,43,45};
/********************************/
void chuang_Six(u32 X)
{
i=X/100000;
j=(X/10000)%10;
k=(X/1000)%10;
l=(X/100)%10;
m=(X/10)%10;
n=X%10;
}
/********************************/
void Dis_XMemory(s32 X)
{
if(X>=0) //
{
LCD_ShowChar(2,110,disdt[10],16,0); //正数
}
else
{
LCD_ShowChar(2,110,disdt[11],16,0); //负数
X=X-2*X;
}
chuang_Six(X);
LCD_ShowChar(10,110,disdt[i],16,0); //
LCD_ShowChar(18,110,disdt[j],16,0); //
LCD_ShowChar(26,110,disdt[k],16,0); //
LCD_ShowChar(34,110,disdt[l],16,0); //
LCD_ShowChar(42,110,disdt[m],16,0); //
LCD_ShowChar(50,110,disdt[n],16,0); //
}
/********************************/
void Dis_NewData(s32 X)
{
if(X>=0) //
{
LCD_ShowChar(2,130,disdt[10],16,0); //正数
}
else
{
LCD_ShowChar(2,130,disdt[11],16,0); //负数
X=X-2*X;
}
chuang_Six(X);
LCD_ShowChar(10,130,disdt[i],16,0); //
LCD_ShowChar(18,130,disdt[j],16,0); //
LCD_ShowChar(26,130,disdt[k],16,0); //
LCD_ShowChar(34,130,disdt[l],16,0); //
LCD_ShowChar(42,130,disdt[m],16,0); //
LCD_ShowChar(50,130,disdt[n],16,0); //
}
/***AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)***/
void Write_Value(s32 Value)
{
if(Value<0) //如果Value小于0为负数
{
p1=Value; //最低位
p2=Value>>8; //第二位
p3=Value>>16&0XFF; //(1111 11第四位强制高六位)(XX第三位取低两位) 最高位为负 数字以补数形式产生
}
else //否则大于0为正数
{
p1=Value; //最低位
p2=Value>>8; //第二位
p3=Value>>16&0X03; //0000 0011 最高位为正 屏蔽高六位
}
}
/************AT24CXX_ReadOneByte(u16 ReadAddr)********************/
s32 Read_X()
{
u8 s;
s32 n,X;
s=p3; //最高位
n=s&0X80; //1000 0000相与
if(n==0X80) //最高位为一等于负数
{
X=0XFF; //FFH 1111 1111
}
else //正
{
X=0X00; // 0000 0000
}
X=X<<8; //最高位第四位左移8位
X=X|s; //和第三位相或取第三位的低两位值
X=X<<8; //左移8位
X=X|p2; //和第二位相或
X=X<<8; //左移8位
X=X|p1; //和第一位相或
return X;
}
/********************************/
int main(void)
{
u8 p,g; //延时循环变量,g=24C02测试变量
s32 h; //有符号16位整型变量
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
LCD_ShowString(10,200,"caizhihong");
LCD_ShowString(10,216,"13775061792");
Draw_Circle(120,160,50); //X Y坐标 半径50
LCD_DrawRectangle(40,260,200,300);//
LCD_Fill(40,40,200,90,BLUE);
delay_ms(5000);
LCD_Init(); //初始化液晶
AT24CXX_WriteOneByte(10,5); /*????????*/
g=AT24CXX_ReadOneByte(10);
LCD_ShowChar(10,180,disdt[g],16,0); //
delay_ms(3000);
while(1)
{
LCD_Init(); //初始化液晶
Dis_XMemory(-2468);
delay_ms(1500);
Write_Value(-2468);
h=Read_X();
Dis_NewData(h);
for(p=0;p<20;p++)
{
delay_ms(600);
LED0=1;
LED1=!LED1;
}
delay_ms(1500);
LCD_Init(); //初始化液晶
Dis_XMemory(7236);
delay_ms(1500);
Write_Value(7236);
h=Read_X();
Dis_NewData(h);
for(p=0;p<20;p++)
{
delay_ms(600);
LED0=!LED0;
LED1=1;
}
delay_ms(1500);
LCD_Init(); //初始化液晶
}
}