📄 lcd_timer_a.c
字号:
/********************
定义头文件,添加头文件
*********************/
#ifndef __LCD
#define __LCD
void LcdInit(); //lcd初始化定义//
void Timer_AInit();
void IO_Init();
#endif
//#include "lcd.h"
#include "msp430.h"
#include "msp430x41x.h"
int i;
int sum;
/*******************************************
液晶屏的初始化
__a__
| |b
f|__g__|
| |c
e|_____|.h
d
数据显示数组4mux驱动方式下的真植对应数组
LCD define 初始化LCD屏
*********************************************/
#define COM1 (0x0004) //必须的//
#define COM2 (0x0008)
#define COM3 (0x0010)
#define R13 (0x0020)
#define R23 (0x0040)
#define R33 (0x0080) //必须的//
#define SegA 0x01
#define SegB 0x02
#define SegC 0x04
#define SegD 0x80
#define SegE 0x40
#define SegF 0x10
#define SegG 0x20
#define SegH 0x08
#define Digit0 SegA+SegB+SegC+SegD+SegE+SegF
#define Digit1 SegB+SegC
#define Digit2 SegA+SegB+SegD+SegE+SegG
#define Digit3 SegA+SegB+SegC+SegD+SegG
#define Digit4 SegB+SegC+SegF+SegG
#define Digit5 SegA+SegC+SegD+SegF+SegG
#define Digit6 SegA+SegC+SegD+SegE+SegF+SegG
#define Digit7 SegA+SegB+SegC
#define Digit8 SegA+SegB+SegC+SegD+SegE+SegF+SegG
#define Digit9 SegA+SegB+SegC+SegD+SegF+SegG
/*******************
液晶驱动模块;
关/开液晶;
向显存中写入数据;
显示消隐藏内容
*******************/
unsigned char Digitx[10] = {Digit0,Digit1,Digit2,Digit3,
Digit4,Digit5,Digit6,Digit7,Digit8,Digit9};
void LcdInit()
{
LCDCTL=LCDSG0_2; //选择段端口s0-s19 4mux显示 LCD打开//
//lcdctl=lcdsgo_2+lcdmux1+lcdmux_0 //
LCDCTL=LCDCTL | 0x5D; // lcd打开,用4mux //
//LCDCTL=0xFD//
}
/*******************
中断口和定时口
********************/
void Timer_AInit(void)
{
TACTL=TASSEL1+TACLR;
CCTL0=CCIE;
CCR0=20000;
TACTL|=MC1;
/*******
TACTL |=BIT4; //选择增计数模式 //
TACTL |=BIT1; //中断允许为开 //
*******/
}
/**********************
输入输出口的初始化
***********************/
void IO_Init(void)
{
P3DIR |= 0xFF; //BIT7; 初始化端口p3.4.5接口//
P4DIR |= 0xFF; //BIT7;
P5DIR |= 0x1F; //BIT2; //com1//
//P5DIR |= 0x04; //BIT3; //com2//
//P5DIR |= 0x08; //BIT4; //com3//
//com0// ?como断口是否需要设定 ?//
P3SEL |= 0Xff ; //选择外围接口//
P4SEL |= 0Xff ;
P5SEL |= 0Xff ;
}
/*********
主程序
*********/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
LcdInit();
IO_Init();
Timer_AInit();
_BIS_SR(LPM3_bits+GIE);
// unsigned char *sum=LCDMEM
// unsigned char n;
// unsigned char *pmem=sum; //定义指针变量pmem的值为sum,//
// pmem=&LCDMEM[i]; //液晶显存地址变量地址save在指针pmem//
//sum=*LCDMEM[i];
/*****************
interrupt 中断程序
*****************/
start:
LCDMEM[1]= Digit0;
LCDMEM[2]= Digit0;
LCDMEM[3]= Digit0;
// int i,sum;
i=0;
// sum=0;
for (i=0;i<=100;i++) //执行加循环//
{
// if (i<100)
sum=i;
//sum=sum+i;
intrrupt1: if(TACTL_TAIFG==1); //jianche 中断
{
// TACTL |=BIT4; //选择增计数模式 //
// TACTL |=BIT1; //中断允许为开 //
LCDMEM[3]=Digitx[sum%10]; //baiwei
LCDMEM[2]=Digitx[(sum/10)%10]; //shiwei
LCDMEM[1]=Digitx[(sum/100)%10]; //gewei
else if (TACTL_TAIFG==0)
goto intrrupt;
}
if(sum<10)
{LCDMEM[1]=0;LCDMEM[2]=0;}
else if (sum<100)
{LCDMEM[1]=0;}
// DelayMs(10000000);
}
// else if (i>100) //执行减循环//
for (i=100;i>=1;i--) //语句的正确性
{
sum=i;
intrrupt2: if(TACTL_TAIFG==1);
{
LCDMEM[3]=Digitx[sum%10]; //baiwei
LCDMEM[2]=Digitx[(sum/10)%10]; //shiwei
LCDMEM[1]=Digitx[(sum/100)%10]; //gewei
else if (TACTL_TAIFG==0)
goto intrrupt2;
}
if(sum<10)
{LCDMEM[1]=0;LCDMEM[2]=0;}
else if (sum<100)
{LCDMEM[1]=0;}
// i--;
// DelayMs(1000000);
}
// DelayMs(1000000000);
sum=i;
LCDMEM[3]=Digit0;
// DelayMs(1000000000);
LCDMEM[2]=Digit0;
// DelayMs(1000000000);
LCDMEM[1]=Digit0;
goto start;
}
// volatile unsigned int i; // volatile to prevent optimization
//P5OUT ^= 0x02; // Toggle P5.1 using exclusive-OR
// i = 10000; // SW Delay
// do i--;
// while (i != 0);
// }
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -