标题:
51单片机数字频率计仿真程序 lcd1602显示
[打印本页]
作者:
878265042
时间:
2019-5-28 15:03
标题:
51单片机数字频率计仿真程序 lcd1602显示
仿真文件图片
LAQ3O9L0E}7AG)NF44}$S4T.png
(48.38 KB, 下载次数: 58)
下载附件
2019-5-28 15:01 上传
附上源代码:
#include <AT89C51.H>
unsigned char codedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char codedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned chardispbuf[8]={0,0,0,0,0,0,10,10};
unsigned char temp[8];
unsigned chardispcount;
unsigned charT0count;
unsigned chartimecount;
bit flag;
unsigned longx;
voidmain(void) //主函数
{
unsigned char i;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;i<8;i++)
{
temp[ i]=0;
}
i=0;
while(x/10)
{
temp[ i]=x%10;
x=x/10;
i++;
}
temp[ i]=x;
for(i=0;i<6;i++)
{
dispbuf=temp[ i];
}
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void)interrupt 1 using 0 //中断1模块的函数编写
{
T0count++;
}
void t1(void)interrupt 3 using 0 //中断3模块的函数编写
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
timecount++;
if(timecount==200)
{
TR0=0;
timecount=0;
flag=1;
}
P2=0xff;
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
复制代码
全部资料51hei下载地址:
新建文件夹.rar
(15.49 KB, 下载次数: 125)
2019-5-28 15:03 上传
点击文件名下载附件
protues文件
下载积分: 黑币 -5
作者:
zhaobolove
时间:
2020-10-4 21:08
这个51单片机中C语言, 里面会用到int能转换为字符串类型吗?怎么转换?
因为是C51, 所以不能用 VC++里面的C语言代码 eg: itoa, 也不要用打印的 eg: sprintf 这些函数.
为什么? 因为C51的内存太小 ,如果这样用非常占用资源. 有些朋友 这样使用就 显得不够专业了.
所以, 一般我们是这样自己写代码使用实现的: 字符串改为数组的形式.
unsigned char dat[5];
dat[4]=Num/10000+'0';
dat[3]=Num%10000/1000+'0';
dat[2]=Num%1000/100+'0';
dat[1]=Num%100/10+'0';
dat[0]=Num%10+'0'
作者:
zhaobolove
时间:
2020-10-9 08:30
unsigned char dat[5];
dat[4]=Num/10000+'0';
dat[3]=Num%10000/1000+'0';
dat[2]=Num%1000/100+'0';
dat[1]=Num%100/10+'0';
dat[0]=Num%10+'0'
上次发送的这些代码 可以很好的运用在 楼主的 计数后 在LCD上显示使用.
因为LCD1602只能显示字符的, 所以要把数字 0 转换为'0' , ...... 以上值得的大家学习!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1