現在做的就是,使用eprom芯片,讓數碼管從0~99顯示,工作原理就是,從單片機里寫一個數字給eprom芯片,然后再從eprom芯片里讀剛才單片機給的數字,把這數字在數碼管顯示出來。如此循環下去,就能看到數碼管從0~99顯示了。
#include #define uchar unsigned char #define uint unsigned int sbit SCL=P2^0; sbit SDA=P2^1; sbit shi=P2^6; sbit ge=P2^7; uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar table[]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39}; uchar x=13; //一次讀取多少個數字 uchar temp[40]; void delay(uchar w) //delay { uchar j; for(;w>0;w--) for(j=0;j<125;j--); } void delay_nop(void) //機器周期延時函數 { _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_(); } void init()//總線初始化 { SDA=1; delay_nop(); SCL=1; delay_nop(); } void start() //總線起始信號 { SDA=1; SCL=1; delay_nop(); SDA=0; delay_nop(); SCL=0; } void stop() //總線停止信號 { SDA=0; SCL=1; delay_nop(); SDA=1; delay_nop(); SCL=0; } void ack() //總線應答信號 { SDA=0; SCL=1; delay_nop(); SCL=0; SDA=1; } void noack() //總線非應答信號 { SDA=1; SCL=1; delay_nop(); SCL=0; SDA=0; } bit detectack() //檢測ACK信號 { bit b_ack; SDA=1; SCL=1; delay_nop(); b_ack=SDA; SCL=0; return b_ack; } void write(uchar input) //向IC總線發送一個字節數據 { uchar i; for(i=0;i<8;i++) { if(input & 0x80) SDA=1; else SDA=0; SCL=1; delay_nop(); SCL=0; delay_nop(); input=input<<1; } } uchar read(void) //向IC總線接收一個字節數據 { uchar tempdata=0,i; SDA=1; for(i=0;i<8;i++) { tempdata=tempdata<<1; tempdata=tempdata | ((uchar) SDA); SCL=1; delay_nop(); SCL=0; } return tempdata; } void write_str(uchar add,uchar *str,uchar num) //向IC器件指定地址寫N節數據 { uchar i; start(); write(0xa0); while(detectack()); write(add); while(detectack()); for(i=0;i write(*str); while(detectack()); str++; /*if(i>13) { write(add++); while(detectack()); }*/ } stop(); delay(20); } uchar read_str(uchar add,uchar *str,uchar num)//從指定IC器件的指定地址讀N字節 數據 { uchar i; //uchar temp; start(); write(0xa0); while(detectack()); write(add); while(detectack()); start(); write(0xa1); while(detectack()); for(i=0;i *str=read(); ack(); str++; } *str=read(); noack(); stop(); delay(20); return str; } void main() //主函數 { //write_str(uchar add,uchar *str,uchar num) 向IC器件指定地址寫N節數據 // read_str(uchar add,uchar *str,uchar num) 從指定IC器件的指定地址讀N字節 數據 uchar i,j; //uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar a,b; init(); //初始化總線 while(1) { write_str(2,table,x); //向IC器件寫入 table[] delay(20); read_str(2,temp,x); //從IC器件讀取 table[] delay(20); for(i=0;i<13;i++) for(j=0;j<150;j++) //停留 { a=(temp/10); b=(temp%10); P0=num[a]; shi=1; //十位顯示 delay(300); shi=0; P0=num; ge=1; //個位顯示 delay(300); ge=0; shi=0; } } } |
100.png (149.63 KB)
歡迎光臨 電子工程網 (http://m.qingdxww.cn/) | Powered by Discuz! X3.4 |