|
功能:通過(guò)按鍵進(jìn)行簡(jiǎn)單的加減,比如:數(shù)碼管數(shù)值是1000,按充值鍵(ADD)充值50,數(shù)碼管就變?yōu)?050,再按消費(fèi)鍵(DEC)消費(fèi)10,數(shù)碼管數(shù)值變?yōu)?040.
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
充值和消費(fèi)2.PNG (39.93 KB, 下載次數(shù): 40)
下載附件
2018-5-27 17:50 上傳
充值和消費(fèi)1.PNG (40.87 KB, 下載次數(shù): 36)
下載附件
2018-5-27 17:50 上傳
0.png (47.23 KB, 下載次數(shù): 48)
下載附件
2018-5-27 18:16 上傳
單片機(jī)程序源碼:
- #include <REGX51.H>
- #define uchar unsigned char
- #define uint unsigned int
- #define out P0
- sbit sda=P2^0;
- sbit scl=P2^1;
- sbit add=P3^6;
- sbit dec=P3^7;
- sbit wx1=P1^4;
- sbit wx2=P1^5;
- sbit wx3=P1^6;
- sbit wx4=P1^7;
- #define card1 0xa0
- #define card2 0xa2
- #define card3 0xa4
- #define card4 0xa6
- #define card5 0xa8
- #define card6 0xaa
- #define card7 0xac
- #define card8 0xae
- uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- //***************************//
- uint temp=1000;
- //***************************//
- void delay()
- {;;}
- //***************************//
- //***************************//
- void delay_1(uint x)
- {while(x--);}
- //***************************//
- //***************************//
- void start()
- {
- sda=1;
- scl=1;
- delay();
- sda=0;
- delay();
- }
- //***************************//
- //***************************//
- void stop()
- {sda=0;
- scl=1;
- delay();
- sda=1;
- delay();
- }
- //***************************//
- //***************************//
- /*該函數(shù)(respons())用于主器件--單片機(jī)"檢測(cè)"從器件(該從器件內(nèi)部具有iic接口,
- 能自動(dòng)產(chǎn)生應(yīng)答信號(hào))接到數(shù)據(jù)后返回給主器件--單片機(jī)的應(yīng)答信號(hào)
- (有應(yīng)答時(shí)為sda=0,無(wú)應(yīng)答時(shí)為sda=1)*/
- void respons() //其實(shí)該函數(shù)真正的作用是模擬產(chǎn)生第九個(gè)時(shí)鐘脈沖,從而滿(mǎn)足iic總線(xiàn)協(xié)議的時(shí)序要求
- {uchar i=0;
- scl=1;delay();
- while((sda==1)&&(i<250))i++;
- scl=0;delay();
- }
- //***************************//
- //***************************//
- /*該函數(shù)(ack_iic(bit a))模擬的應(yīng)答信號(hào)是由主器件--單片機(jī)(一般用在主器件--單片機(jī)從總線(xiàn)上讀數(shù)據(jù)后,
- 此時(shí)主器件--單片機(jī)的角色為接收器)"主動(dòng)產(chǎn)生"并返回給從器件的應(yīng)答信號(hào)
- (當(dāng)形參a=0時(shí)為應(yīng)答,當(dāng)形參a=1時(shí)為非應(yīng)答)*/
- void ack_iic(bit a) // 當(dāng)形參a=0時(shí)為應(yīng)答,當(dāng)形參a=1時(shí)為非應(yīng)答
- {if(a==0)sda=0;
- else sda=1;
- delay();
- scl=1;
- delay();
- scl=0;
- delay();
- }
- //***************************//
- //***************************//
- void init() //iic總線(xiàn)初始化函數(shù)(將兩根線(xiàn)的電平全部拉高,使總線(xiàn)處于"備用"狀態(tài))
- {
- scl=1;sda=1;delay();
- }
- //***************************//
- //***************************//
- void write_byte(uchar dat)
- {uchar i,temp;
- temp=dat;
- scl=0;delay();
- for(i=0;i<8;i++)
- {temp=temp<<1;
- sda=CY;delay();scl=1;delay();scl=0;delay();
- }
- sda=1;delay();//向端口寫(xiě)1,為后續(xù)的"讀字節(jié)"函數(shù)做好準(zhǔn)備!最好加上這一句,因?yàn)?1單片機(jī)的I/O口為準(zhǔn)雙向口,在讀入端口數(shù)據(jù)前應(yīng)先向端口寫(xiě)1,以確保讀入數(shù)據(jù)準(zhǔn)確!
- }
- //***************************//
- //***************************//
- uchar read_byte()
- {uchar i,j,k;
- sda=1;//先向端口寫(xiě)1,最好加上這一句,因?yàn)?1單片機(jī)的I/O口為準(zhǔn)雙向口,在讀入端口數(shù)據(jù)前應(yīng)先向端口寫(xiě)1,以確保讀入數(shù)據(jù)準(zhǔn)確!
- for(i=0;i<8;i++)
- {scl=1;delay();j=sda;k=(k<<1)|j;
- scl=0;delay();
- }
- return k;
- }
- //***************************//
- /*"寫(xiě)操作"函數(shù),設(shè)置三個(gè)參數(shù),其中num為器件地址,address為字節(jié)地址,dat為要寫(xiě)入的數(shù)據(jù)*/
- void write_add(uchar num,uchar address,uchar dat)
- { start();
- write_byte(num);
- respons();
- write_byte(address);
- respons();
- write_byte(dat);
- respons();
- stop();
- }
復(fù)制代碼
全部資料51hei下載地址:
AT24C02(消費(fèi) 充值).rar
(50.25 KB, 下載次數(shù): 53)
2018-5-27 17:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|