www.pudn.com > main.rar > main.c


#include  
#define uchar unsigned char 
unsigned char j; 
unsigned int b,s,g,fai,l,n,p,e,f,T,c,z,pl,pk,pb,ps,pg; 
long int t,v0=0,v1=0; 
 
const unsigned char num[32][32]={ 
/*--  文字:  0  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00}, 
 
/*--  文字:  1  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00}, 
 
/*--  文字:  2  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00}, 
 
/*--  文字:  3  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00}, 
 
/*--  文字:  4  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00}, 
 
/*--  文字:  5  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00}, 
 
/*--  文字:  6  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00}, 
 
/*--  文字:  7  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00}, 
 
/*--  文字:  8  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00}, 
 
/*--  文字:  9  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00}, 
 
/*--  文字:  -  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80}, 
 
/*--  文字:  +  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00}, 
 
/*--  文字:  H  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04}, 
 
/*--  文字:  Z  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00}, 
 
/*--  文字:  :  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}}; 
 
 
 
 
 
const unsigned char a[32][32]={ 
/*--  文字:  度  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00, 
0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00}, 
 
/*--  文字:  频  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x04,0x3C,0x04,0x04,0xFD,0x24,0x24,0x00,0x4F,0x58,0x6B,0x48,0x48,0x4F,0x40,0x00, 
0x22,0xC2,0x04,0x08,0xD0,0x20,0xC2,0x02,0xE4,0x18,0xE0,0x10,0x08,0xE4,0x06,0x00}, 
 
/*--  文字:  率  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x30,0x28,0x25,0x20,0x26,0xAC,0x75,0x26,0x24,0x28,0x25,0x28,0x20,0x20,0x00, 
0x10,0x50,0x90,0x10,0x10,0x50,0xD0,0x7F,0x50,0xD0,0x30,0x10,0x90,0x50,0x10,0x00}, 
 
/*--  文字:  为  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x08,0x08,0x48,0x28,0x38,0x08,0x0F,0xF9,0x08,0x08,0x08,0x08,0x1F,0x08,0x00, 
0x00,0x00,0x02,0x04,0x08,0x10,0x60,0x80,0x00,0x88,0x64,0x02,0x04,0xF8,0x00,0x00}, 
 
/*--  文字:  相  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x08,0x08,0x0B,0xFF,0x0C,0x0A,0x09,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00, 
0x20,0xC0,0x00,0xFF,0x00,0x00,0x80,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00}, 
 
/*--  文字:  位  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x03,0x0C,0x37,0xC0,0x54,0x13,0x90,0x50,0x70,0x10,0x17,0x12,0x10,0x00,0x00, 
0x80,0x00,0x00,0xFE,0x04,0x04,0x04,0xE4,0x04,0x0C,0x74,0x84,0x04,0x04,0x04,0x00}, 
 
/*--  文字:  差  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x01,0x11,0x15,0x15,0x95,0x75,0x57,0x1D,0x15,0x35,0xD5,0x55,0x15,0x11,0x01,0x00, 
0x02,0x04,0x08,0x12,0x62,0xA2,0x22,0x22,0x3E,0x22,0x22,0x22,0x22,0x02,0x02,0x00}, 
 
/*--  文字:  第  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00, 
0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00}, 
 
/*--  文字:  小  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x00,0x00,0x03,0x0E,0x04,0x00,0xFF,0x00,0x08,0x04,0x03,0x01,0x00,0x00,0x00, 
0x20,0x40,0x80,0x00,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,0x00,0x80,0xE0,0x40,0x00}, 
 
/*--  文字:  组  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x04,0x1C,0xE5,0x46,0x18,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,0x00, 
0x00,0x44,0xC4,0x44,0x48,0x48,0x04,0xFC,0x44,0x44,0x44,0x44,0xFC,0x04,0x04,0x00}, 
 
/*--  文字:  制  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x00,0x0A,0xF2,0x52,0x12,0xFF,0x12,0x12,0x12,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00, 
0x00,0x00,0xFC,0x80,0x80,0xFF,0x84,0x86,0xFC,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00}, 
 
/*--  文字:  作  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
{0x01,0x02,0x04,0x1F,0xE0,0x44,0x18,0x30,0xDF,0x12,0x12,0x12,0x16,0x12,0x10,0x00, 
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x20,0x20,0x20,0x20,0x60,0x20,0x00}}; 
 
 
 
 
 
 
 
void delay_us(unsigned char n); 
void delay_ms(unsigned char n); 
void lcd_SendByte(uchar x); 
void lcd_MC(uchar x); 
void lcd_MD(uchar x); 
void lcd_clear(void); 
void LcdIni(void); 
void lcd_DrawBmp(uchar x0,uchar page,uchar width); 
void lcd_hanzichuan(uchar s,uchar y,uchar k); 
void lcd_hanzi(uchar x0,uchar page,uchar width); 
void lcd_zifu(uchar x0,uchar page,uchar width); 
void lcd_zifuchuan(uchar s,uchar y,uchar k); 
 
 
void lcd_SendByte(uchar x) 
{ 
  uchar i,n=0x80;  
   
  for(i=0;i<8;i++)   //从最高位开始发送 
  { 
    if (x&n)  
      P3OUT|=BIT1;   //P3.1=1,输出数据信号到液晶 
    else  
      P3OUT&=~BIT1;  //P3.1=0 
      n=n>>1; 
      //delay_us(5); 
      P3OUT|=BIT3;   //P3.3=1,输出脉冲信号 
     // delay_us(5); 
      P3OUT&=~BIT3;   //P3.3=0 
      //delay_us(5); 
      P3OUT|=BIT3;     
  } 
} 
 
 
void lcd_MC(uchar x) 
{ 
  P3OUT|=BIT3;  //P3.3=1, 
  P3OUT&=~BIT0;  //p3.0=0,片选有效 
  P3OUT&=~BIT2;  //p3.2=0,表示送出指令 
  lcd_SendByte(x);  //调用发送字节函数 
  P3OUT|=BIT0;   //p3.0=1,片选无效 
} 
 
 
 
void lcd_MD(uchar x) 
{ 
  P3OUT|=BIT3;  //P3.3=1, 
  P3OUT&=~BIT0;  //p3.0=0,片选有效 
  P3OUT|=BIT2;  //p3.2=0,表示送出指令 
  lcd_SendByte(x);  //调用发送字节函数 
  P3OUT|=BIT0;   //p3.0=1,片选无效 
} 
     
void lcd_clear(void)  //清屏程序 
{ 
  uchar i,page; 
 for (page=0;page<8;page++) 
  { 
    lcd_MC(0xB0|page); // 设置显示页面 
    lcd_MC(0x10); // 设置列地址高位 
    lcd_MC(0x01); // 设置列地址低位 
 for (i=0;i<128;i++) 
    { 
      lcd_MD(0x00);//lcd_SD(0x00); 
    } 
  } 
} 
 
 
void LcdIni(void)  //液晶屏初始化 
{  
  P3DIR |=0xFF; 
  lcd_MC(0xE2);     //液晶屏复位 
  lcd_MC(0x2F);  //工作状态设置 
  lcd_MC(0x81);  //电压模式设定 
  lcd_MC(0x31);  //电压寄存器设定 
  lcd_MC(0xA2);  //bias=1/9(11) 
  lcd_MC(0xA0);  //ADC,clo0 maps seg0(8) 
  lcd_MC(0xC0);  //remapped mode.com0-->comn(15) 
  lcd_MC(0x40);  //设定起始行地址 
  lcd_MC(0xAF);   //启动LCD 
  lcd_clear();// 清屏 
} 
 
void lcd_hanzi(uchar x0,uchar page,uchar width)  //单个汉字显示 
{ 
  uchar x,i=0; 
   
for (x=x0+1;x>4)&0x0f)|0x10);    // 设置列地址高位 
    lcd_MC(x&0x0F);                // 设置列地址低位 
    lcd_MD(a[j][i]);             // 画上层  
       
    lcd_MC(0xB0|(page-1));         //设置页地址 
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位 
    lcd_MC(x&0x0F);               //设置列地址低位    
    lcd_MD(a[j][i+width]);              // 画下层  
    i++; 
  } 
} 
 
void lcd_zifu(uchar x0,uchar page,uchar width)  //单个字符显示 
{ 
  uchar x,i=0; 
   
for (x=x0+1;x>4)&0x0f)|0x10);    // 设置列地址高位 
    lcd_MC(x&0x0F);                // 设置列地址低位 
    lcd_MD(num[j][i]);             // 画上层  
       
    lcd_MC(0xB0|(page-1));         //设置页地址 
    lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位 
    lcd_MC(x&0x0F);               //设置列地址低位    
    lcd_MD(num[j][i+width]);              // 画下层  
    i++; 
  } 
} 
     
 
void lcd_hanzichuan(uchar s,uchar y,uchar k)   //一页汉字显示 
{ 
  uchar i=0; 
  for(i=0;i<1;i++) 
    {  lcd_hanzi((s+i*k),y,k); j++;   } 
} 
 
 
void lcd_zifuchuan(uchar s,uchar y,uchar k)   //一页字符显示 
{ 
  uchar i=0; 
  for(i=0;i<1;i++) 
    {  lcd_zifu((s+i*k),y,k); j++;   } 
} 
  
void delay_us(unsigned char n) 
{ 
  unsigned char i; 
   i=n;   
  while(i!=0) 
  { 
    _NOP(); 
    _NOP(); 
    _NOP(); 
    _NOP(); 
    i--;      
  } 
} 
void delay_ms(unsigned char n) 
{ 
  unsigned char i; 
  i=n; 
  while(i!=0) 
  {  //3CLK 
    delay_us(250); 
    delay_us(250); 
    delay_us(250); 
    delay_us(250); 
    i--;  //1CLK 
   } 
} 
 
 
void main(void) 
{ 
    WDTCTL=WDTPW+WDTHOLD; 
       BCSCTL1 &= ~XT2OFF;  
       BCSCTL2 =SELM_2+SELS;  // 选择MCLK、SMCLK为XT2  
   do{ 
    IFG1 &= ~(OFIFG);    //清除振荡器失效标志  
    //delay_us(128);       //延时,等待XT2起振 
    } 
    while ((IFG1 & OFIFG) != 0);    //判断XT2是否起振  
     
     
   // delay_ms(5); 
     
    //delay_ms(20); 
     
     _EINT(); 
     
    TACTL=TASSEL_2+ID_0+MC_2+TACLR; 
    TACCTL0=CM_3+CCIS_0+SCS+CAP+CCIE; 
    TACCTL1=CM_1+CCIS_0+SCS+CAP+CCIE; 
    P1DIR=0X00; 
    P1SEL=0x0e; 
     
    
    LcdIni(); 
     
   while(1)  
    
    {    
    
       fai=t*360/T; 
       b=fai/100; 
       s=(fai%100)/10; 
       g=fai%10; 
        
       pl=8000000/T; 
       pk=pl/1000; 
       pb=pl%1000/100; 
       ps=pl%1000%100/10; 
       pg=pl%10; 
        
        
       j=1; 
       lcd_hanzichuan(0,3,16); 
       delay_ms(1); 
       j=2; 
       lcd_hanzichuan(16,3,16); 
       delay_ms(1); 
       j=3; 
       lcd_hanzichuan(32,3,16); 
       delay_ms(1); 
       j=14; 
       lcd_zifuchuan(48,3,8); 
       delay_ms(1); 
       j=pk; 
       lcd_zifuchuan(56,3,8); 
       delay_ms(1); 
       j=pb; 
       lcd_zifuchuan(64,3,8); 
       delay_ms(1); 
       j=ps; 
       lcd_zifuchuan(72,3,8); 
       delay_ms(1); 
       j=pg; 
       lcd_zifuchuan(80,3,8); 
       delay_ms(1); 
       j=12; 
       lcd_zifuchuan(88,3,8); 
       delay_ms(1); 
       j=13; 
       lcd_zifuchuan(96,3,8); 
       delay_ms(1); 
        
       j=7; 
       lcd_hanzichuan(0,7,16); 
       delay_ms(1); 
       j=7; 
       lcd_zifuchuan(16,7,8); 
       delay_ms(1); 
       j=8; 
       lcd_hanzichuan(24,7,16); 
       delay_ms(1); 
       j=9; 
       lcd_hanzichuan(40,7,16); 
       delay_ms(1); 
       j=10; 
       lcd_hanzichuan(56,7,16); 
       delay_ms(1); 
       j=11; 
       lcd_hanzichuan(72,7,16); 
       delay_ms(1); 
        
        
       j=4; 
       lcd_hanzichuan(0,1,16); 
       delay_ms(1); 
       j=5; 
       lcd_hanzichuan(16,1,16); 
       delay_ms(1); 
       j=6; 
       lcd_hanzichuan(32,1,16); 
       delay_ms(1); 
       j=3; 
       lcd_hanzichuan(48,1,16); 
       delay_ms(1); 
       j=14; 
       lcd_zifuchuan(64,1,8); 
       delay_ms(1); 
        
        
        
      if(P1IN&BIT3) 
      {            
       
        j=10; 
        lcd_zifuchuan(73,1,8); 
        delay_ms(1); 
        j=b; 
        lcd_zifuchuan(81,1,8); 
        delay_ms(1); 
        j=s; 
        lcd_zifuchuan(89,1,8); 
        delay_ms(1); 
        j=g; 
        lcd_zifuchuan(97,1,8); 
        delay_ms(1); 
       j=0; 
       lcd_hanzichuan(105,1,16); 
        delay_ms(200); } 
      //  } 
        else if(P1IN&(~BIT3))  
       {   
        j=11; 
        lcd_zifuchuan(73,1,8); 
        
          j=b; 
          lcd_zifuchuan(81,1,8); 
          delay_ms(1); 
          j=s; 
          lcd_zifuchuan(89,1,8); 
          delay_ms(1); 
          j=g; 
          lcd_zifuchuan(97,1,8); 
          delay_ms(1); 
         j=0; 
          lcd_hanzichuan(105,1,16); 
          delay_ms(200);}   
        
    }; 
 
 } 
  
#pragma vector=TIMERA0_VECTOR 
__interrupt void timera0(void) 
{   
 
  
  if(v0==0) 
   {  
   l=TACCR0; 
     v0=1; 
     } 
      
      else if(v0==1) 
      { 
      n=TACCR0; 
        v0=2; 
       
        } 
          else if(v0==2) 
            { p=TACCR0; 
               v0=0; 
               c=n-l;z=p-n; 
               if(c>z) 
                  {t=z;} 
                   else if (c