很简单的时钟程序(单片机)

qwp_qwp 2010-08-14 04:04:30
/****************************
名称:6位数码管显示
功能:显示从0到9
作者:
日期:2010-4-13
**************************************/
#include<reg51.h>
#include<ABSACC.H>
#include<delay.h>

#define LEDLen 6 //6个数码管

#define OUTBIT XBYTE[0Xe101]//定义位选地址 8

#define CLK164 XBYTE[0Xe102]//定义74HC164时钟线
#define DAT164 XBYTE[0Xe102]//定义74HC164数据线

unsigned char LEDBuf[LEDLen];//定义缓冲区

code unsigned char LEDMAP[]=
{ //11 111100
0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//0,1,2,3,4,5,6,7
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71//8,9,A,B,C,D,E,F
};

unsigned char second=0,NunBer=0,min=0,hou=0;

/****************************
名称:6位数码管显示
功能:每把8位段码送给74HC164,然后再点位码,从左到右依次扫描。
作者:
日期:2010-4-13
**************************************/
void DisplayLED()
{
unsigned char i,j;
unsigned char Pos;
unsigned char LED;
Pos=0x20;// 位选变量,从左到右//0010 0000
for(i=0;i<LEDLen;i++)//6个数据管,动态扫描6次,从左到右。
{
OUTBIT=0; //先关位选 001
LED=LEDBuf[i]; //把段码存到0x3f 0=0011 1111 1=0111 1110 0x3f= 1111 1100
for(j=0;j<8;j++) //送8次,因为有8段//送数进74hc164 0x80= 1000 0000 // 1000 0000
{ //1000 0000 //=== 1000 0000
if(LED&0X80)DAT164=1;else DAT164=0; //每次取LED的最高位,送到数据线上。
CLK164=CLK164|0X02;//每送完一位,就对应的给一个脉冲
CLK164=CLK164&0XFD;
LED<<=1;
}

OUTBIT=Pos;//送完段码后,就开始从左到右点亮0001 0000
Delay_Led(1);
Pos>>=1;//位选右移
}
OUTBIT=0; //每显示完一次,就关掉,因为要下面重新得到的数
}

/****************************
名称:主函数
功能:
作者:
日期:2010-4-13
**************************************/
void Init()
{

TMOD=0X01; //定时器0工作方式1

TH0=0X9E;//50ms
TL0=0X58;

EA=1;
ET0=1;

TR0=1;

}

void main()
{
unsigned char t;
Init();

while(1)
{
/*如何把秒,分显示出来?*/
LEDBuf[0]=LEDMAP[second%10];//LEDMAP[t]是把要显示的数找到对应的段码
LEDBuf[1]=LEDMAP[second/10];
LEDBuf[2]=LEDMAP[min%10];
LEDBuf[3]=LEDMAP[min/10];
LEDBuf[4]=LEDMAP[hou%10];
LEDBuf[5]=LEDMAP[hou/10];
for(t=0;t<10;t++)
DisplayLED();//把数据显示出来


}
}

void T0_time() interrupt 1 //50ms
{

TH0=0X9E; //50ms
TL0=0X58;

NunBer++;
/*如何得到秒,分?倒计时应该怎么写?*/
if(NunBer>=20)//50*20=1s
{
second++;
if(second>59)
{
second=0;

NunBer=0;
min++;
if(min>59)
{
min=0;
hou++;
if(hou>23)hou=0;
}
}


}
}


如何用12864中文液晶显示字体左右移动呢??AT89s51实现……且用C程序编写 需整个程序 可用的 简单的
...全文
240 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
工夫茶 2011-03-01
  • 打赏
  • 举报
回复
学习学习学习学习学习
jtchen1983 2010-12-23
  • 打赏
  • 举报
回复
单片机能跑这个程序?
周凯_csdn 2010-10-07
  • 打赏
  • 举报
回复
单片机。。。
jz_clytze 2010-08-31
  • 打赏
  • 举报
回复
1111
lzpkshy 2010-08-31
  • 打赏
  • 举报
回复
呵呵,看不懂,不过我先收着,放着以后慢慢研究,谢LZ。。。

6,954

社区成员

发帖
与我相关
我的任务
社区描述
《新程序员》读者俱乐部
其他 其他
社区管理员
  • 《程序员》杂志社区
  • SoftwareTeacher
  • 《新程序员》编辑部
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧