czdpj的个人空间 https://bbs.21ic.com/?1363736 [收藏] [复制] [RSS]

日志

原子开发板显示一个正数和显示一个负数

已有 253 次阅读2018-3-3 17:24 |个人分类:C语言|系统分类:单片机| STM32

/***原子开发板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();                                      //初始化液晶       
                                                                }
              }


                                 





路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)