数码管显示时间及点阵显示字符

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//数码管显示时间及点阵显示字符

#include

#include

#define uchar unsigned char

#define uint unsigned int

//定义Max7219端口

#define DUAN P0 //P0口控制段

#define WEI P2 //P2口控制位

sbit k_hour=P1^0; // 更改小时按键

sbit k_min=P1^1; // 更改分钟按键

sbit k_sec=P1^2; // 更改秒按键

//定义数码管端口

sbit Max7219_pinCLK = P1^2;

sbit Max7219_pinCS = P1^1;

sbit Max7219_pinDIN = P1^0;

//Max7219位定义

unsigned char key; //P3按键扫描(执行模块控制)

code uchar seg7code[11]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF }; //显示段码数码管字跟

uchar wei[8]={0XFE,0XFD,0XFB,0XF7,0XEf,0XDf,0XBf,0X7f}; //位的控制端

uchar numb[8]; //定义字符串

uint sec=0,min,hour;

//数码管初始定义

uchar code disp2[7][8]={

{0x00,0x3E,0x2A,0xFF,0xAA,0xBE,0xC0,0x00}, //电

{0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00}, //一

{0x00,0x00,0x1E,0x20,0x40,0x20,0x1E,0x00}, //V

{0x00,0x00,0x4E,0x4A,0x4A,0x7A,0x00,0x00}, //5

{0x00,0x00,0x42,0x7E,0x42,0x00,0x00,0x00}, //I

{0x00,0x0C,0x1E,0x3C,0x3C,0x1E,0x0C,0x00}, //love

{0x00,0x00,0x3E,0x40,0x40,0x3E,0x00,0x00}, //U

};

char flag;

//定义点阵显示字符

void Delay_xms(uint x)

{

uint i,j;

for(i=0;i

for(j=0;j<300;j++);

}

//公用的延时程序

//功能:向MAX7219(U3)写入字节

//入口参数:DATA

//出口参数:无

void Write_Max7219_byte(uchar DATA)

{

uchar i;

Max7219_pinCS=0;

for(i=8;i>=1;i--)

{

Max7219_pinCLK=0;

Max7219_pinDIN=DATA&0x80;

DATA=DATA<<1;

if(flag)Delay_xms(500);

Max7219_pinCLK=1;

}

}

//功能:向MAX7219写入数据

//入口参数:address、dat

//出口参数:无

//说明:

void Write_Max7219(uchar address,uchar dat)

{

Max7219_pinCS=0;

Write_Max7219_byte(address); //写入地址,即数码管编号

Write_Max7219_byte(dat); //写入数据,即数码管显示数字Max7219_pinCS=1;

}

void Init_MAX7219(void)

{

Write_Max7219(0x09, 0x00); //译码方式:BCD码

Write_Max7219(0x0a, 0x03); //亮度

Write_Max7219(0x0b, 0x07); //扫描界限;8个数码管显示

Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1

Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0 }

void t_to_dis()

{

numb[0]=hour/10; //显示小时十位

numb[1]=hour%10; //显示小时个位

numb[2]=10; //显示横杠

numb[3]=min/10; //显示分十位

numb[4]=min%10; //显示分个位

numb[5]=10; //显示横杠

numb[6]=sec/10; //显示秒十位

numb[7]=sec%10; //显示秒个位

}

//数码管求值函数

void display()//显示函数

{

//数码管数据转换

P2=0XFF;

P0=seg7code[numb[0]];

P2=wei[0];

Delay_xms(80);

P2=0XFF;

P0=seg7code[numb[1]];

P2=wei[1];

Delay_xms(80);

P2=0XFF;

P0=seg7code[numb[2]];

P2=wei[2];

Delay_xms(80);

P2=0XFF;

P0=seg7code[numb[3]];

P2=wei[3];

Delay_xms(80);

P2=0XFF;

P0=seg7code[numb[4]];

P2=wei[4];

Delay_xms(80);

相关文档
最新文档