标题:
51单片机光控计数器仿真与源码
[打印本页]
作者:
m2478085531
时间:
2018-4-6 20:27
标题:
51单片机光控计数器仿真与源码
单片机光控计数器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(32.83 KB, 下载次数: 80)
下载附件
2018-4-6 23:17 上传
单片机源程序如下:
#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define DataPort P2 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P3^5;//定义锁存使能端口 段锁存
sbit LATCH2=P3^4;// 位锁存
sbit HW1=P3^2;
sbit HW2=P3^3;
sbit led=P1^4;
sbit qing=P1^2;
unsigned int num;
unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7};//分别对应相应的数码管点亮,即位码,567801234
unsigned char TempData[8]; //存储显示值的全局变量
void delay(unsigned int i)
{
while(i--);
}
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i<Num;i++)
{
DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
delay(50); // 扫描间隙延时,时间太长会闪烁,
//太短会造成重影
}
}
void disp()
{
unsigned char j;
for(j=0;j<200;j++)
{ if(j==40)
{
if(num==100)
num=0;
}
TempData[0]=dofly_DuanMa[num/10];//分解显示信息,
//如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[num%10];
}
}
void jia()
{
if(HW1==0)
while(HW2==1) Display(5,2);
if(HW2==0)
{
num++;
led=0;
if(num==99)
num=0;
}
while(HW2==0) Display(5,2);
}
void jian()
{
if(HW2==0)
while(HW1==1) Display(5,2);
if(HW1==0)
{
if(num>0)
num--;
led=0;
if(num==0)
num=0;
}
while(HW1==0) Display(5,2);
}
void main()
{
while(1)
{
led=1;
if(HW1==0)
jia();
if(HW2==0)
jian();
disp();
if(qing==0)
num=0;
Display(5,2);
}
}
复制代码
所有资料51hei提供下载:
实验1.rar
(167.92 KB, 下载次数: 97)
2018-4-6 20:25 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
huangtingli
时间:
2020-9-9 15:02
hhhh,我打不开了,不过还是谢谢楼主,我自己画了
作者:
hlw123
时间:
2020-9-10 17:15
请问楼主,那两个非门起什么作用
作者:
qq2455003862
时间:
2020-9-23 20:41
有人能解释一下这个图形 步骤什么的么
作者:
qq2455003862
时间:
2020-9-23 20:48
请问楼主 能对proteus图进行一下比较简单的解释么
作者:
禁漫汉化组
时间:
2025-5-17 10:14
好的
谢谢博主
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1