|
首先感謝ID:941754大佬提供的源程序,原文鏈接
1.jpg (143.71 KB, 下載次數(shù): 16)
下載附件
2022-12-7 23:19 上傳
源程序中:
無(wú)物品時(shí),數(shù)碼管顯示P
有物品通過(guò)開(kāi)始計(jì)數(shù)并在數(shù)碼管上顯示,每計(jì)滿(mǎn)100個(gè),蜂鳴器響一下。
單片機(jī)源程序如下:- #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; //按鍵松開(kāi)標(biāo)志位
- //數(shù)碼管引腳
- sbit Num1=P2^0;
- sbit Num2=P2^1;
- sbit Num3=P2^2;
- sbit Num4=P2^3;
- unsigned char ScanTime=1; //數(shù)碼管4個(gè)位
- unsigned int Num=0;
- //數(shù)碼管段碼表
- unsigned char code SEG_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
- /*-------------------------------------
- 數(shù)碼管顯示
- ---------------------------------------*/
- void display()
- {
- P0=0x00;
- P2=0xFF;
- switch(ScanTime)
- {
- //----------數(shù)碼管第1位--------------
- case 1:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/1000];
- }
- Num1=0;
- break;
- //-----------數(shù)碼管第2位-------------
- case 2:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/100%10];
- }
- Num2=0;
- break;
- //-----------數(shù)碼管第3位-------------
- case 3:
- if(Num==0)
- {
- P0=0x00;
- }
- else
- {
- P0=SEG_Tab[Num/10%10];
- }
- Num3=0;
- break;
- //-----------數(shù)碼管第4位-------------
- case 4:
- if(Num==0)
- {
- P0=0x73;
- }
- else
- {
- P0=SEG_Tab[Num%10];
- }
- Num4=0;
- break;
- //------------------default---------------
- default: break;
- }
- //-----數(shù)碼管循環(huán)------
- ScanTime++;
- if(ScanTime>4)
- {
- ScanTime=1;//循環(huán)掃描
- }
- }
- /*-------------------------------------
- 按鍵掃描
- ---------------------------------------*/
- void keyscan()
- {
- if(K1==0)
- {
- if(flag_KEY==1)//按鍵只響應(yīng)1次
- {
- flag_KEY=0;
- if(Num<999)
- {
- Num++;
- }
- }
- }
- else if(K2==0)
- {
- if(flag_KEY==1)//按鍵只響應(yīng)1次
- {
- flag_KEY=0;
- if(Num>0)
- {
- Num--;
- }
- }
- }
- else//按鍵松開(kāi)
- {
- flag_KEY=1;
- }
- }
- void delay_ms(unsigned int ms)// 延時(shí)子程序
- {
- unsigned int a,b;
- for(a=ms;a>0;a--)
- for(b=123;b>0;b--);
- }
- /*-------------------------------------
- 主函數(shù)
- ---------------------------------------*/
- void main()
- {
- while(1)
- {
- display();
- keyscan();
- delay_ms(10);
- if(Num>=100)
- {
- FMQ=0;
- }
- else
- {
- FMQ=1;
- }
- }
- }
復(fù)制代碼 我想這個(gè)的基礎(chǔ)上加以修改致用,原理圖為:
2.jpg (187.96 KB, 下載次數(shù): 13)
下載附件
2022-12-7 23:22 上傳
其中為兩種模式(按模式按鍵切換),模式一:
1.計(jì)數(shù)模式,上面數(shù)碼管顯示”----“
2.下面數(shù)碼管顯示計(jì)數(shù),其中光電開(kāi)關(guān)動(dòng)作一次,數(shù)碼管計(jì)數(shù)+1,直到9999
3.led狀態(tài)指示燈點(diǎn)亮,圖中未體現(xiàn)(可用空閑IO口)
4.按開(kāi)始按鍵電機(jī)開(kāi)始運(yùn)轉(zhuǎn),暫停鍵電機(jī)暫停(P3.7口)
模式二:
1.通過(guò)矩陣鍵盤(pán)輸入設(shè)定的數(shù)值于上面數(shù)碼管顯示
2.按開(kāi)始按鍵后電機(jī)開(kāi)始運(yùn)轉(zhuǎn),光電開(kāi)關(guān)開(kāi)始檢測(cè)數(shù)據(jù)并在下發(fā)數(shù)碼管中顯示
3.數(shù)據(jù)達(dá)到設(shè)定的數(shù)值后電機(jī)停止,也可手動(dòng)按暫停按鍵暫停,再次按暫停按鍵或開(kāi)始按鍵后數(shù)值繼續(xù)增加。
4.led狀態(tài)指示燈點(diǎn)亮,圖中未體現(xiàn)(可用空閑IO口,與模式一區(qū)分開(kāi))
求大佬們指導(dǎo)指導(dǎo) |
-
-
計(jì)數(shù).zip
2022-12-7 23:57 上傳
點(diǎn)擊文件名下載附件
124.38 KB, 下載次數(shù): 6
源程序及修改的
|