设计要求:
1.检测流水线上有无物品,无物品显示P。
2.有物品通过开始计数并在数码管上显示,每计满100个,蜂鸣器响一下,提醒工作人员打包。
3.通过按键可以修改计件数。
完整源码和proteus仿真文件:
计数.rar
(47.75 KB, 售价: 3 E币)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
部分源码:完整请下载附件
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit FMQ=P3^7;
- //按键
- sbit K1=P3^0;
- sbit K2=P3^1;
- bit flag_KEY=0; //按键松开标志位
- //数码管引脚
- sbit Num1=P2^0;
- sbit Num2=P2^1;
- sbit Num3=P2^2;
- sbit Num4=P2^3;
- unsigned char ScanTime=1; //数码管4个位
- unsigned int Num=0;
- //数码管段码表
- unsigned char code SEG_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- /*-------------------------------------
- 数码管显示
- ---------------------------------------*/
- void display()
- {
- P0=0x00;
- P2=0xFF;
- switch(ScanTime)
- {
- //----------数码管第1位--------------
- case 1:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/1000];
- }
-
- Num1=0;
- break;
- //-----------数码管第2位-------------
- case 2:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/100%10];
- }
-
-
- Num2=0;
- break;
- //-----------数码管第3位-------------
- case 3:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/10%10];
- }
-
-
- Num3=0;
- break;
- //-----------数码管第4位-------------
- case 4:
- if(Num==0)
- {
- P0=0x73;
- }
- else
- {
- P0=SEG_Tab[Num%10];
- }
-
- Num4=0;
- break;
- //------------------default---------------
- default: break;
- }
-
- //-----数码管循环------
- ScanTime++;
- if(ScanTime>4)
- {
- ScanTime=1;//循环扫描
- }
- }
- /*-------------------------------------
- 按键扫描
- ---------------------------------------*/
- void keyscan()
- {
- if(K1==0)
- {
- if(flag_KEY==1)//按键只响应1次
- {
- flag_KEY=0;
-
- if(Num<999)
- {
- Num++;
- }
- }
- }
- else if(K2==0)
- {
- if(flag_KEY==1)//按键只响应1次
- {
- flag_KEY=0;
-
- if(Num>0)
- {
- Num--;
- }
- }
- }
- else//按键松开
- {
- flag_KEY=1;
- }
- }
- void delay_ms(unsigned int ms)// 延时子程序
- {
- unsigned int a,b;
- for(a=ms;a>0;a--)
- for(b=123;b>0;b--);
- }
- /*-------------------------------------
- 主函数
- ---------------------------------------*/
- void main()
- {
- while(1)
- {
- display();
- keyscan();
- delay_ms(10);
- if(Num>=100)
- {
- FMQ=0;
- }
- else
- {
- FMQ=1;
- }
- }
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|