📄 main.c
字号:
#include <msp430x14x.h>
#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<x0+width+1;x++) //起始列地址x0,页地址page,数据宽度width
{
// 一次显示两页
lcd_MC(0xB0|page); //设置页地址
lcd_MC(((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<x0+width+1;x++) //起始列地址x0,页地址page,数据宽度width
{
// 一次显示两页
lcd_MC(0xB0|page); //设置页地址
lcd_MC(((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<z)
t=c;
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void timera1(void)
{ CCTL1&=~BIT0;
if(v1==0)
{ e=TACCR1;
v1=1;}
else if (v1==1)
{f=TACCR1;
v1=0;
T=(f-e)/2;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -