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