|
IMG_20200409_195436.jpg (2.79 MB, 下載次數(shù): 81)
下載附件
2020-4-9 20:13 上傳
部分程序
- #include <reg52.h> //此文件中定義了單片機(jī)的一些特殊功能寄存器
- #include "STC89C52_EEPROM.h" //STC89C52內(nèi)部存儲(chǔ)驅(qū)動(dòng)
- #include "delay.h" //調(diào)用延時(shí)函數(shù)
- #define uchar unsigned char //宏定義無符號(hào)字符形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱uchar 所占位數(shù)8位 范圍0~255
- #define uint unsigned int //宏定義無符號(hào)整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱uint 所占位數(shù)16位 范圍0~65535
- #define ulong unsigned long int //宏定義無符號(hào)長整形數(shù)據(jù)類型進(jìn)行聲明定義 定義名稱ulong 所占位數(shù)32位 范圍0~4294967295
- /*按鍵IO引腳定義*/
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit k1=P3^0; //加按鍵
- sbit k2=P3^1; //減按鍵
- sbit k3=P3^2; //保存數(shù)據(jù)按鍵
- sbit k4=P3^3; //讀取數(shù)據(jù)按鍵
- uchar code duan_ma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //顯示0~9的值
- uchar duan_ma_wei[6]; //存儲(chǔ)記錄數(shù)碼管6個(gè)段碼位的值
- ulong K_num; //記錄存儲(chǔ)按鍵按下的數(shù)值
- ulong num[6]; //把按鍵的數(shù)值分散給與num6個(gè)組數(shù)
- /*數(shù)據(jù)結(jié)合處理*/
- void shujujiehe()
- {
- K_num=num[0]+num[1]*10+num[2]*100+num[3]*1000+num[4]*10000+num[5]*100000;
- }
- /*數(shù)據(jù)分散處理*/
- void shujufensan()
- {
- num[0]=K_num%10; //分散K_num數(shù)值給與num[0]
- num[1]=K_num%100/10; //分散K_num數(shù)值給與num[1]
- num[2]=K_num%1000/100; //分散K_num數(shù)值給與num[2]
- num[3]=K_num%10000/1000; //分散K_num數(shù)值給與num[3]
- num[4]=K_num%100000/10000; //分散K_num數(shù)值給與num[4]
- num[5]=K_num%1000000/100000; //分散K_num數(shù)值給與num[5]
- }
- /*讀出EEPROM扇區(qū)*/
- void EEPROM_Read()
- {
- num[0]=IapReadByte(0x2000); //讀出EEPROM 2000扇區(qū)
- num[1]=IapReadByte(0x2001); //讀出EEPROM 2001扇區(qū)
- num[2]=IapReadByte(0x2002); //讀出EEPROM 2002扇區(qū)
- num[3]=IapReadByte(0x2003); //讀出EEPROM 2003扇區(qū)
- num[4]=IapReadByte(0x2004); //讀出EEPROM 2004扇區(qū)
- num[5]=IapReadByte(0x2005); //讀出EEPROM 2005扇區(qū)
- }
- /*按鍵設(shè)置*/
- void anjian()
- {
- if(k1==0) //判斷按鍵是否按下
- {
- delay_ms(10); //按鍵消抖延時(shí)
- if(k1==0) //如果按鍵真的按下
- {
- if(K_num<999900)K_num=K_num+100;
- else(K_num=0);
- shujufensan(); //數(shù)據(jù)分散處理
- }
- }
- if(k2==0) //判斷按鍵是否按下
- {
- delay_ms(10); //按鍵消抖延時(shí)
- if(k2==0) //如果按鍵真的按下
- {
- if(K_num>0)K_num=K_num-100;
- else(K_num=999900);
- shujufensan(); //數(shù)據(jù)分散處理
- }
- }
- if(k3==0) //判斷按鍵是否按下
- {
- delay_ms(10); //按鍵消抖延時(shí)
- if(k3==0) //如果按鍵真的按下
- {
- IapEraseSector(0x2000); //2000扇區(qū)擦除
- IapEraseSector(0x2001); //2001扇區(qū)擦除
- IapEraseSector(0x2002); //2002扇區(qū)擦除
- IapEraseSector(0x2003); //2003扇區(qū)擦除
- IapEraseSector(0x2004); //2004扇區(qū)擦除
- IapEraseSector(0x2005); //2005扇區(qū)擦除
-
- IapProgramByte(0x2000,num[0]); //將分散好后的num[0]存儲(chǔ)到EEPROM 2000扇區(qū)
- IapProgramByte(0x2001,num[1]); //將分散好后的num[1]存儲(chǔ)到EEPROM 2001扇區(qū)
- IapProgramByte(0x2002,num[2]); //將分散好后的num[2]存儲(chǔ)到EEPROM 2002扇區(qū)
- IapProgramByte(0x2003,num[3]); //將分散好后的num[3]存儲(chǔ)到EEPROM 2003扇區(qū)
- IapProgramByte(0x2004,num[4]); //將分散好后的num[4]存儲(chǔ)到EEPROM 2004扇區(qū)
- IapProgramByte(0x2005,num[5]); //將分散好后的num[5]存儲(chǔ)到EEPROM 2005扇區(qū)
- }
- while(!k1); //判斷按鍵是否松開
- }
-
- if(k4==0) //判斷按鍵是否按下
- {
- delay_ms(10); //按鍵消抖延時(shí)
- if(k4==0) //如果按鍵真的按下
- {
- EEPROM_Read(); //讀出EEPROM扇區(qū)
- }
- while(!k4); //判斷按鍵是否松開
- }
- }
- /*主函數(shù)*/
- void main()
- {
- uchar i;
- EEPROM_Read(); //開機(jī)讀出EEPROM扇區(qū)
- shujujiehe(); //開機(jī)讀數(shù)據(jù)結(jié)合處理
- while(1) //循環(huán)
- {
- anjian(); //讀按鍵設(shè)置
- duan_ma_wei[0]=duan_ma[num[5]]; //數(shù)碼管顯示
- duan_ma_wei[1]=duan_ma[num[4]]; //數(shù)碼管顯示
- duan_ma_wei[2]=duan_ma[num[3]]; //數(shù)碼管顯示
- duan_ma_wei[3]=duan_ma[num[2]]; //數(shù)碼管顯示
- duan_ma_wei[4]=duan_ma[num[1]]; //數(shù)碼管顯示
- duan_ma_wei[5]=duan_ma[num[0]]; //數(shù)碼管顯示
-
- for(i=0;i<6;i++) //對數(shù)碼管進(jìn)行動(dòng)態(tài)掃描
- {
- switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
- {
- case(0):LSA=1;LSB=0;LSC=1;break;//顯示第1位
- case(1):LSA=0;LSB=0;LSC=1;break;//顯示第2位
- case(2):LSA=1;LSB=1;LSC=0;break;//顯示第3位
- case(3):LSA=0;LSB=1;LSC=0;break;//顯示第4位
- case(4):LSA=1;LSB=0;LSC=0;break;//顯示第5位
- case(5):LSA=0;LSB=0;LSC=0;break;//顯示第6位
- }
- P0=duan_ma_wei[i]; //發(fā)送段碼
- delay_ms(1);
- P0=0x00; //消隱
- }
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|