永发信息网

求一MSP430 时钟C语言程序

答案:1  悬赏:0  手机版
解决时间 2021-04-25 02:38
  • 提问者网友:轮囘Li巡影
  • 2021-04-24 08:30

MSP430F413单片机构成的时钟小系统程序清单如下:

#include <msp430x41x.h>

#define LCD_IN_USE 10

const unsigned char NUM_LCD[17]={

0xd7, 0x06, 0xe3, 0xa7, 0x36, //'0'~ '4'

0xb5, 0xf5, 0x07, 0xf7, 0xb7, //'5' ~ '9'

0x77, 0xf4, 0xd1, 0xe6, 0xf1, // 'A'~ 'E'

0x71, 0x00}; // 'F','全熄'

unsigned char lcd_Buf[LCD_IN_USE]; // 自定义显示缓冲区,用于要显示的数据

unsigned int cont,y0,y1,y2; //秒、时、分存储变量

void init_LCD(void)

{

char tmpv;

BTCTL = BT_fLCD_DIV32; // set LCD 时钟

P5SEL = 0xfc; // 置为外围模块

LCDCTL = LCDON+LCD4MUX+LCDP1; // 4Mux 模式

for (tmpv = 0;tmpv<10;tmpv++)

{

LCDMEM[tmpv] = 0x00; //clear LCD

}

}

void cl_LCD(void)

{

char tmpv;

for (tmpv = 0;tmpv<10;tmpv++)

{

LCDMEM[tmpv] = 0x00; //clear LCD

}

}

void lcd_Display(void)

{

char tmpv;

lcd_Buf[0]=y2/10;

lcd_Buf[1]=y2%10;

lcd_Buf[2]=16;

lcd_Buf[3]=y1/10;

lcd_Buf[4]=y1%10;

lcd_Buf[5]=16;

lcd_Buf[6]=y0/10;

lcd_Buf[7]=y0%10;

lcd_Buf[8]=16;

lcd_Buf[9]=16;

for(tmpv=0;tmpv<LCD_IN_USE-1;tmpv++)

{

LCDMEM[tmpv] = NUM_LCD[lcd_Buf[tmpv]]; //更新LCDMEM中的内容

}

}

interrupt[WDT_VECTOR] void watchdog_timer(void)

{

cont=cont+1;

if(cont==4)

{

cont=0;

y0=y0+1; //秒加1

if(y0==60)

{

y0=0;

y1=y1+1; //60秒为1分,分加1

if(y1==60)

{

y1=0;

y2=y2+1; //60分为1小时,小时加1

if(y2==24)

{y2=0 ; //24小时再清零

}

}

}

cl_LCD();

lcd_Display();

_NOP();

}

}

void main(void)

{

WDTCTL = WDT_ADLY_250; // WDT间隔时间为250ms(ACLK)

IE1 |= WDTIE; // 使能WDT中断

SCFQCTL |= SCFQ_4M; // 设定主时钟为4MHz

init_LCD();

_EINT(); // 使能中断

cont=0;

y0=0;

y1=0;

y2=0;

for (;;)

{

_BIS_SR(CPUOFF); //关CPU

_NOP(); // 调试程序使用

}

}

本人欲在此基础上增加显示时间功能 要求:显示时间格式 NN-YY-RR LCD显示屏显示时间和日期每5秒交替显示一次 我的QQ81173002 如果哪位高手能帮忙 感激不尽

最佳答案
  • 五星知识达人网友:执傲
  • 2021-04-24 09:49
根据进中断时间,刷新数码管就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯