『壹』 单片机自动流水线工件计数器设计 20 自动流水线工件计数器设计: 工件
# include <reg51.h>
#define uchar unsigned char
uchar dis_de[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uchar time=0; //用于计算工件数
sbit beep=P1^0; //用于报警
sbit com1=P3^4; //定义数码管的位选
sbit com2=P3^5;
sbit com3=P3^6;
sbit com4=P3^7;
void delay ()
{
unsigned char j;
for (j=0;j<253;j++);
}
void dis() //显示工件数
{
com1=1;
P2=dis_de[time/100];
delay();
com1=0;
com2=1;
P2=dis_de[time%100/10];
delay();
com2=0;
com3=1;
P2=dis_de[time%100%10];
delay();
com3=0;
com4=0;
}
main ()
{
uchar i;
EX0=1; //开放外部中断0,用于接收光敏传感器的信号
IT0=1;
EA=1;
while (1)
{
for(i=100;i>0;i--)
{
dis();
}
if(time==200) //当等于200时,关闭中断,并报警
{
EX0=0;
beep=0;
time=0; //用于重新开始计数
}
}
}
void t1(void) interrupt 0 //中断服务程序,进行工件计数+1
{
while(INT0==0);
time++;
}
『贰』 单片机C51课程设计:表决投票计数装置。哪位高人帮我写个完整的!多谢
三个按键:赞成、反对、弃权;
四组数码显示;赞成、反对、弃权、总数的投票数;
两个指示灯:通过、没有通过。
通过标准:三分之二以上(含三分之二)赞成。
『叁』 利用STC12C5A32S2单片机设计实现计数一定脉冲个数后在显示屏上显示一个计数,怎样用C语言实现跪求!!
用单片机的外部中断触发计数,再显示就好了。
『肆』 以51单片机为基体 用C语言设计一个计数器 要求显示数据8位 有复位功能 时间间隔1秒 动态显示
void dis_cnter(void) 显示计数器值子程序开始
{uchar i; 定义字符型局部变量i
P3_7=1;P3_6=1; 消隐有效,允许显示
for(i=0;i8;i++) 循环8次
{SBUF=SEG7[cnt];while(!TI);TI=0;} 根据8个单元的计数值查表发送显示
P3_7=0; 关闭消隐,正常显示
} 显示计数器值子程序结束
void cnter(void) 计数转换子程序开始
{uchar i; 定义字符型局部变量i
for(i=0;i7;i++) 循环8次
{if(cnt9){cnt=0;cnt[i+1]++;}}若计数器某位值大于9,则该位回0,
而高位被进位加1
------------------------------------
if(cnt[7]9){for(i=0;i8;i++)cnt=0;} 若计数器最高位值大于9,则计数器全清0
} 计数转换子程序结束
void pt_cnt(void) 输出控制子程序开始
{
if((cnt[0]==pre_cnt[0])&&(cnt[1]==pre_cnt[1])&&
(cnt[2]==pre_cnt[2])&&(cnt[3]==pre_cnt[3])&&
(cnt[4]==pre_cnt[4])&&(cnt[5]==pre_cnt[5])&&
(cnt[6]==pre_cnt[6])&&(cnt[7]==pre_cnt[7])) 若计数值等于预置值
out_flag=1; 输出标志置1
else out_flag=0; 否则输出标志置0
=================================================
if(out_flag)drv=0; 若输出标志为1,输出端(P3.4)置0,驱动光耦U2
else drv=1; 否则输出端(P3.4)置1
} 输出控制子程序结束
void main(void) 主程序开始
{ IE=0x84; 开放CPU中断,开放外中断1的中断
IT1=1; 置外中断1为边沿触发
while(1) 无限循环
{P3_6=0;P3_7=1; 禁止发送给显示器,消隐有效
SBUF=0x00;while(!TI);TI=0; 向IC2发送0x00,使IC2输出为全0
if((P3&0x24)!=0x24)keydown_flag=1; 检测P3.2、P3.5是否为高电平。
若不为高电平,说明有键按下,键被按下标志置1
else keydown_flag=0; 否则,键被按下标志置0
-------------------------------------------------------------------------------
SBUF=0xfe;while(!TI);TI=0; 向IC2发送0xfe
if(!P3_2)set_flag=!set_flag; 若P3.2为0,说明S9键按下,标志set_flag取反
==================================================
if(!set_flag){cnter();dis_cnter();pt_cnt();delay(100);}
若标志set_flag为0,调用计数、显示计数、输出控制的子程序
else {scan_key();dis_pre_cnter();delay(10);}
否则标志set_flag为1,调用扫描S1~S8键、显示预置值的子程序
=====================================================
if(keydown_flag)delay(300); 因有键按下,调用延时300mS子程序,
以免调整键值的速度过快
}
} 主程序结束
void extern_int1(void) interrupt 2 using 1 外中断1服务子程序
{
cnt[0]++; 计数器的最低位加1
}
『伍』 利用单片机的定时/计数功能设计一个频率测量装置,并以此频率输出方波
可以看看这个,51单片机简易频率计
『陆』 基于单片机的光电传感器的计数器设计
计数显示电路可完成对上述脉冲信号的计数和显示。图3是由单片机构成的计数系统框图。 计数系统以MCS-51系列单片机的8031为核心,8013单片机的外围扩展了程序存储器27C256和数据存储器WM0016DRH,此外,用8255扩展了I/O口,同时具有时钟单元、掉电保护、看门狗单元、通信单元以及LED(发光二极管)显示器、键盘等。 1)8031单片机及存储器 8031内含4kb EEPROM程序存储器,具有功耗低、抗干扰能力强的特点,可安置于监测现场,数据存储器WM0016DRH是一种多功能非易失性SRAM,特点如下:高速高抗干扰自保持,不怕掉电,上下电百万次数据无丢失,断电保护10年有效,既可高速连续读写,也可任意地址单字节操作,无需拼凑页面,随机读写不需等待,立即有效,输入输出TTL/CMOS兼容,上电复位输出,掉电保护,内置看门狗,电源监测,不用外加电路和电池,且引脚与标准SRAM兼容。 2)计数及显示 多车道车流量数对应的脉冲通过光电隔离耦合并行输入至8031单片机的P1口,通过软件控制和键盘设定计数值并用LED加以显示,可自动循环显示或定点显示两种方式,且两者相互间可任意切换[4]。 当热释电传感器安装位置固定后,输入脉冲的脉宽和占空比均取决于高速公路上车辆的车速和车距(脉宽对应车辆传感器有效监视方位内的时间,车速和车距有限定),占空比q小于50%,为了准确拾取车流量信息,通过软件可实现单片机对每一路并行输入数据的读取周期小于脉宽,且将每路各自相邻的两读取周期读取的数据进行运算(暂存前一个周期读取的数据),若两数据为01,则自动计1,否则计0。其中0为前一个周期的读取数据,此时脉冲为低电平,1为后一个周期的读取数据,此时脉冲为高电平,从而避免了对脉冲的漏计和重复计数,再把4路的读数每一周期进行一次加运算,累加后的和就是总的车流量。 将8031单片机内的定时器/计数器设定为工作方式1,构成16位二进制计数器[5],采用动态扫描方式直接驱动5位十进制计数器[5]。采用动态扫描方式直接驱动5位十进制LED显示,最大计数值达到65536,可记录4车辆的车流量并显示一个月内的日流量,累计4车道一个月内的日流量总和,计数器内数据保护时间可达一个月之久。当计数器达到设定值时,声光报警,可存储数据,并手动复位。 3)时钟单元 采用DS12C887实时时钟芯片,具有显示具体时间信息的功能,若设计调整和设置按键,可方便地对时间进行调整和设置,从而为车流量的统计提供准确的时间数据。 4)串行通信单元 由于单片机系统的数据存储能力和数据处理能力有限,以及现场实时性要求较高,故单片机现场只能暂时存储采集到的数据和对数据进行简单处理,至于大量的数据存储和后续复杂的数据处理可交给上位机完成,由于大型机具有RS-232标准串行口,所以通过8031单片机TTL电平全双工串行口,附加RS-232电平转换电路MAX3232可与上位机实现数据通信。 3 软件设计 计数系统的程序主要包括系统自检程序、系统初始化程序、键盘扫描程序、按键处理程序、显示程序以及数据采集处理程序等,图4所示为主程序流程。 4 安装与调试
『柒』 利用单片机设计实现一个60秒倒计时显示装置,并且计时到后发出报警声音。
#include<reg52.h>
sbitbz=P3^1;
unsignedchara[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsignedcharn,time=60;
main()
{
P1=a[0];
P2=a[6];
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
timer0()interrupt1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(time!=0)
{
n++;
if(n==100)
{
n=0;
time--;
P1=a[time%10];
P2=a[time/10];
}
}
elsebz=~bz;
}
『捌』 求51单片机设计两位计数器
难度不大,
51单片机设计两位计数器
我稍微指点你。