感應壓力后進行計時
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png (40.27 KB, 下載次數: 41)
下載附件
2022-5-7 03:11 上傳
51hei.png (15.82 KB, 下載次數: 57)
下載附件
2022-5-7 03:12 上傳
51hei.png (7.6 KB, 下載次數: 47)
下載附件
2022-5-7 03:12 上傳
單片機源程序如下:
- #include<reg52.h> //頭文件
- #include<LCD1602.h>
- #include<INTERRUPT.h>
- #include<AT24C02.h>
- #include<ADC0832.h>
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- /**********************引腳定義************************/
- sbit key_set = P1^0; //設置鍵
- sbit key_jia = P1^3; //加值鍵
- sbit key_jian = P1^6; //減值鍵
- /**********************變量定義************************/
- uchar set_f=0; //設置變量 =1進入設置
- uint num=0;
- /********************************************************
- 函數名稱:void delayms(uint ms)
- 函數作用:毫秒延時函數
- 參數說明:
- ********************************************************/
- void delayms(uint ms)
- {
- unsigned char i=100,j;
- for(;ms;ms--)
- {
- while(--i)
- {
- j=10;
- while(--j);
- }
- }
- }
- /********************************************************
- 函數名稱:void display(void)
- 函數作用:顯示函數
- 參數說明:
- ********************************************************/
- void display()
- {
- ADC0832_read(0);
- if(ADC_date>20) //檢測到有壓力感應
- {
- if(miao1==0&&fen1==0) //還沒有開啟計時的話
- TR0=1; //開啟定時器計時
- lcd1602_write_character(2,1,"Have pressure");
- LCD_disp_char(5,2,ASCII[fen1/10]); //顯示設置分
- LCD_disp_char(6,2,ASCII[fen1%10]);
- LCD_disp_char(7,2,':');
- LCD_disp_char(8,2,ASCII[miao1/10]); //顯示設置秒
- LCD_disp_char(9,2,ASCII[miao1%10]);
- f=0;
- T_num=0;
- }
- else
- {
- f=1;
- //TR0=0; //壓力釋放后,關閉定時器計時
- if(TR0==0)
- {
- lcd1602_write_character(2,1," No pressure ");
- lcd1602_write_character(5,2," ");
- }
- //miao1=0; //計時時間清0
- //fen1=0;
- //buzz=1; //關閉蜂鳴器
- }
- }
- /********************************************************
- 函數名稱:void display2()
- 函數作用:設置時間
- 參數說明:
- ********************************************************/
- void display2()
- {
- num++;
- lcd1602_write_character(2,1,"Set MAX time");
- if(num%2==0) //偶數次顯示,奇數次不顯示。這樣就會有閃爍效果,可以清楚看到當前設置的是哪個值
- {
- LCD_disp_char(5,2,ASCII[fen/10]); //顯示設置分
- LCD_disp_char(6,2,ASCII[fen%10]);
- LCD_disp_char(7,2,':');
- LCD_disp_char(8,2,ASCII[miao/10]); //顯示設置秒
- LCD_disp_char(9,2,ASCII[miao%10]);
- }
- else //奇數次不顯示
- {
- switch(set_f)//根據當前設置的內容,對應位置閃爍
- {
- case 1: lcd1602_write_character(5,2," "); break;
- case 2: lcd1602_write_character(8,2," "); break;
- default: break;
- }
- }
- }
- /********************************************************
- 函數名稱:void scan(void)
- 函數作用:按鍵查詢處理函數
- 參數說明:
- ********************************************************/
- void scan(void)
- {
- if(key_set==0) //按鍵按下
- {
- delayms(7); //延時消抖
- if(key_set==0) //再次確認按鍵按下
- {
- set_f++; //設置變量+1
- if(set_f>2) //全部設置完成,退出設置
- {
- set_f=0; //重置設置變量
-
- AT24C02_write_date(0,fen); //寫入【分】數據保存
- AT24C02_write_date(1,miao);//寫入【秒】數據保存
- }
- }
- while(!key_set);
- }
-
- //加值
- if(key_jia==0) //按鍵按下
- {
- delayms(7); //延時消抖
- if(key_jia==0) //再次確認按鍵按下
- {
- if(set_f==1) //設置時間-分
- {
- if(fen<99) //最大可設置99分
- fen++; //時間-分+1
- }
- if(set_f==2) //設置時間-秒
- {
- if(miao<59) //最大可設置59秒
- miao++; //時間-秒+1
- else
- miao=0; //時間-秒清0
- }
- }
- }
-
- //減值
- if(key_jian==0) //按鍵按下
- {
- delayms(7); //延時消抖
- if(key_jian==0) //再次確認按鍵按下
- {
- if(set_f==1) //設置時間-分
- {
- if(fen!=0) //最小可設置到0
- fen--; //時間-分-1
- }
- if(set_f==2) //設置時間-秒
- {
- if(miao!=0) //最小可設置到0
- miao--; //時間-秒-1
- else
- miao=59;
- }
- }
- }
- }
- /********************************************************
- 函數名稱:void mian()
- 函數作用:主函數
- 參數說明:
- ********************************************************/
- void main()
- {
- if(key_jian==0)
- {
- delayms(100);
- if(key_jian==0)
- {
- AT24C02_write_date(0,0); //寫入【分】數據保存
- AT24C02_write_date(1,10);//寫入【秒】數據保存
- }
- }
- fen=AT24C02_read_date(0); //讀取存儲的【分】數據
- miao=AT24C02_read_date(1); //讀取存儲的【秒】數據
- T0_init(); //定時器初始化
- LCD_init();//LCD1602初始化
- while(1) //死循環
- {
- scan();//按鍵掃描并處理
- if(set_f==0) //正常檢測狀態
- {
- num++;
- if(num%1500==0)
- {
- num=0;
- display();
- }
- }
- else //設置時間狀態
- display2();
- }
- }
復制代碼
程序和原理圖PCB下載:
壓力計時器.zip
(1.12 MB, 下載次數: 55)
2022-5-6 22:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|