电脑里翻出来的,51的频率计,用的数码管显示,作者不明
翻翻电脑看到了这个东西。。发来给大家看看。。
作者不明,大概以前别的论坛找的。。
1http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_239580.JPG
点击此处下载ourdev_239575.rar(文件大小:58K) //****12mhz***////
#include"reg52.h"
#define uchar unsigned char
#define uintunsigned int
uchar codetv[]={0xfe,0xfd,0xfb,0xf7};
uchar codea[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchardataled;
uint datafre;
ucharcnt;
void delay(void)
{
uint i;
for(i=0;i<10;i++);
}
void led_show(void)
{
uchar k,i;
led=fre%10;
led=fre/10%10;
led=fre/100%10;
led=fre/1000;
for(k=0;k<4;k++)
{
P2=tv;
i=led;
P0=a;
delay();
}
}
/********************50ms*********************************************/
void Timer_Init (void)
{
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
}
void T0_ISP(void) interrupt 1
{
cnt++;
if (cnt==20)
{
cnt=0;
EA=0;
fre=TL1+(TH1<<8); //体会为什么要这样写呢?TH1是计数高8位,TL1是低8位,这个16位数分2部分存放,
EA=1; //高8位和低8位进制是256。这里写成这样也可以fre=TH1*256+TL1
TL1=0;
TH1=0;
}
TH0=(65536-50000)/256;//注;为什么要在这里附上TH0,TL0的初值。(减小误差)
TL0=(65536-50000)%256;
}
void main()
{
uint i;
Timer_Init();
TR0=1;
TR1=1;
while(1)
{
for(i=0;i<20;i++)
{
led_show();
}
}
} 收藏了,谢谢!! 顶,找了好久了,谢谢~ fre=TL1+(TH1<<8); //体会为什么要这样写呢?TH1是计数高8位,TL1是低8位,这个16位数分2部分存放,
这句我觉得有错误 TH1 是 8位的 不能向又移 应该要一个 16位的中间变量转化下才行把
这只是个人看法有兴趣加我QQ 讨论 QQ: 306119166 啊东 very good!
thanks 为什么TMOD 0x51的时候计数器1还能工作呢,有谁能指教一下啊 很黄很暴力! 留个记号 马克 记号 感谢分享! 感谢分享! mark 好资源,正需要顶一个!! 感谢分享 MARK mark 不知道用什么打开 先mark。再学习 回复【17楼】wqsyx
不知道用什么打开
-----------------------------------------------------------------------
PROTEUS 貌似只能测试到10K 啊????????????? 非常感谢 正是我所需要的 谢谢 谢谢,分享
页:
[1]