找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7716|回复: 1
打印 上一主题 下一主题
收起左侧

驱动单片机数码管程序改如何写

[复制链接]
跳转到指定楼层
楼主
ID:2356 发表于 2008-8-30 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想驱动单片机数码管,我的 程序不晓得如何才能写对/-------------------------------
// MCS51-Study.C
//------------------------------
// [文件包含] 程序中用到哪些C51标准函数,就需要把该函数对应的头文件包含进来
//-----#include
#include
#include
//-----------------------------------
// 为提高书写效率做以下宏定义
//-------------------------------
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#define CLOSE 1//为了逻辑清晰
#define OPEN 0



sbit SECOND_L =P2^0;//数码管公共端控制位管脚
sbit SECOND_H =P2^1;


//=============================================
//======================全局变量=============
uchar timer_50ms;
uchar hour;
uchar minute;
uchar second;

uchar leddata[]={0xC7, //"0"
0xFA, //"1"
0xAB, //"2"
0xB7, //"3"
0x9A, //"4"
0x98, //"5"
0x88, //"6"
0xF9, //"7"
0x87, //"8"
0x97, //"9"
};
//------------------------------------------
// 键盘扫描相关的全局变量
//-----------------------------------------
uchar key_value_previous;
uchar key_press_counter;
uchar key_value_main;
//-------------------------------------
// 函数声明
//------------------------------------------
void init_cpu(void);
void show_time(uchar hour_data,uchar minute_data,uchar second_data);
uchar key_scan(void);
//===============================
//===================== ======
//===================== 主程序==
//===================== =======
//========================================
void main (void)
{
init_cpu();
second = 0;

wqyloop:
show_time(hour,minute,second);
goto wqyloop;
}
//########################## 主程序结束 ########
//########################## 子程序开始 ########
// 函数功能:CPU初始化函数
// 串口波特率可以由T1或T2产生,本例中用T1产生波特率
// T1用于50毫秒精确定时

//=================================================
void init_cpu(void)
{
TMOD=0x10;//T1为16位计数器

TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
TL1=0x00;
TR1=1;//T1开始定时

ET1=1;
EA=1;//CPU中断开放
}
//=======================================
void show_time(uchar hour_data,uchar minute_data,uchar second_data)
{ uchar hour_data_h;
uchar hour_data_l;
uchar minute_data_h;
uchar minute_data_l;
uchar second_data_h;
uchar second_data_l;

hour_data_h = hour_data/10;
hour_data_l = hour_data%10;
minute_data_h = minute_data/10;
minute_data_l = minute_data%10;
second_data_h = second_data/10;
second_data_l = second_data%10;

//扫描显示

P0 = leddata[second_data_h];
SECOND_H=OPEN;
SECOND_L=CLOSE;

P0 = leddata[second_data_l];
SECOND_H=CLOSE;
SECOND_L=OPEN;
}
//=====================================中断=====
// T1中断服务程序
//============================================
void T1_interrupt(void) interrupt 3
{ TH1=0x4c;//11.0592M晶振时T1定时时间长度为50毫秒
TL1=0x00;
timer_50ms++;//50毫秒中断一次
if(timer_50ms==20)
{second = second+1;
if(second==60)
{second=0;
}
}
}
//======================================
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:66501 发表于 2014-11-13 15:43 | 只看该作者
掘墓高手,专挖古墓,一挖一个坑,坑坑见墓。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表