注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
谭钢的个人空间 https://home.eeworld.com.cn/space-uid-562139.html [收藏] [复制] [分享] [RSS]
日志

8位一体数码管动态显示时钟

已有 625 次阅读2014-7-15 15:12 |个人分类:msp430系列| 数码管, 动态

主要函数:
#include<msp430f249.h>

#define CPU_F ((double)8000000)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))      //延时1毫秒

const char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X40};
char time[3];
char dis_buff[8];
char time_counter;//1s计数器


void display(void)//显示扫描函数,执行时间16ms
{
static char i;
P3OUT=0xFF;
P1OUT=tab[dis_buff[i+1]];//字段码送数码管
P3OUT=~(1<<i);//位置选低
if(++i==8)
i=0;
delay_ms(0.1);
}


void time_to_disbuffer(void)//时间值送显示缓冲函数
{
dis_buff[0]=time[2]/10;//小时
dis_buff[1]=time[2]%10;
dis_buff[3]=time[1]/10;
dis_buff[4]=time[1]%10;//分钟
dis_buff[6]=time[0]/10;
dis_buff[7]=time[0]%10;//秒
}

void main(void)
{
P1DIR=0xFF;//P1初始化为输出端口
P3DIR=0xFF;//P2初始化为输出端口
time[2]=23;
time[1]=58;
time[0]=55;//时间初值23:58:55
time_to_disbuffer();
dis_buff[2]=dis_buff[5]=10;
while(1)
{
display();//显示扫描
if(++time_counter>=250)//更新时间
{
time_counter=0;
if(++time[0]>=60)
{
time[0]=0;
if(++time[1]>=60)
{
time[1]=0;
if(++time[2]>=24)
time[2]=0;
}
}
time_to_disbuffer();//修改显示缓冲区
}

}
}
用Proteus8仿真后,数码管第一位显示不出来,求指导。。。。






评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章