設計要求:
1.檢測流水線上有無物品,無物品顯示P。
2.有物品通過開始計數并在數碼管上顯示,每計滿100個,蜂鳴器響一下,提醒工作人員打包。
3.通過按鍵可以修改計件數。
完整源碼和proteus仿真文件:
計數.rar
(47.75 KB, 售價: 3 E幣)
2023-5-26 13:26 上傳
點擊文件名下載附件
售價: 3 E幣 [記錄]
[ 購買]
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png (21.93 KB)
下載附件
2021-7-6 16:18 上傳
部分源碼:完整請下載附件
- #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)指出,本站將立即改正。
|