找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的6位数显频率计

[复制链接]
跳转到指定楼层
楼主
单片机课设方案,供大家学习
程序如下:
#include<AT89X51.H>
#define uchar unsigned char
uchar xdata *ad_adr;
uchar n=0;
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;
bit bk=1;
unsigned char LED1,LED2,LED3,LED4,LED5;
unsigned char idata led_data[3];
uchar
code
led_segment[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x0,0x0};
uchar
code
led_segment2[12]={0xBF,0x86,0xDB,0xcF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x0,0x80};
void delay2ms();  
unsigned char temp[8];
unsigned char dispcount;
unsigned char T0count;
unsigned char timecount;
bit flag;  
unsigned long x,y;
float z;  
void delay(unsigned int i)
{
  
while(i)i--;
}  
void display(void)
{
  



if((x>0)&(x<1000))  
{
y=x;  
LED1=y%10;
LED2=(y/10)%10;
LED3=(y/100)%10;
LED4=y/1000;
P2 = 0xff;
delay(2);
led7=0;  
P1=led_segment[LED1];
led1=0;
delay(100);
led1=1;  
P1=led_segment[LED2];
led2=0;
delay(100);
led2=1;  
P1=led_segment[LED3];
led3=0;
delay(100);
led3=1;   
P1=led_segment[LED4];
led4=0;
delay(100);
led4=1;
bk=!bk;
}


if((x>=1000)&(x<10000))  
{   
z=x/10.0;
y=z;
LED1=y%10;
LED2=(y/10)%10;
LED3=(y/100)%10;
LED4=(y/1000)%10;
LED5=y/10000;
P2 = 0xff;
delay(2);
led8=0;  
P1=led_segment[LED1];
led1=0;
delay(100);
led1=1;  
P1=led_segment[LED2];
led2=0;
delay(100);
led2=1;  
P1=led_segment2[LED3];
led3=0;
delay(100);
led3=1;  
P1=led_segment[LED4];
led4=0;
delay(100);
led4=1;
P1=led_segment[LED5];
led5=0;
delay(100);
led5=1;
bk=!bk;
}   
}
  
void main(void)
{  
TMOD=0x15;
TH0=0;
TL0=0;  
TH1=(65536-4000)/256;  
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{  
if(flag==1)
{  
flag=0;  
x=T0count*65536+TH0*256+TL0+1;  
while(1)
{  
if(bk)*ad_adr=0;
display();
}

dispcount=0;
timecount=0;
T0count=0;
TH0=0;
TL0=0;  
TR0=1;
TR1=1;
}
}
}
void t0(void) interrupt 1 using 0
{  
T0count++;
}  
void t1(void) interrupt 3 using 0
{   
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
timecount++;   
if(timecount==249)
{
TR0=0;
TR1=0;
timecount=0;
flag=1;  
}  
}
  
void delay2ms(void)
{  
uchar a,b;  
for(a=5;a>0;a--)  
    for(b=248;b>0;b--);  
}


1.png (20.68 KB, 下载次数: 13)

原理图

原理图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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