#include #include “intrins.h” //頭文件 #define INT8U unsigned char //宏定義 #define INT16U unsigned int #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit wei1 = P2^0; //數碼管的位選端口 sbit wei2 = P2^1; sbit wei3 = P2^2; sbit wei4 = P2^3; sbit K1=P2^7; sbit ledg=P3^0; sbit ledr=P3^1; bit flag0,flag1,flag2;//定義標志位 uchar temp,key; unsigned int Num1=0,Num2=0;//定義變量 uchar code table_dm[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共陽極數碼管斷碼表 uchar code table_dd[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};//共陽極數碼管斷碼表 uint Display_Buffer[4]={1,0,0,0}; //定義數組 uint a,b,n; //定義變量 void delayms(uint xms) //延時子程序 { int i,j; for(i=xms;i>0;i–) for(j=110;j>0;j–); } void delay1(uint z)//延時為 1ms { uchar x,x1; for(;z>0;z–) { for(x=0;x<114;x++) { for(x1=0;x1<1;x1++); } } } void delay()//5us延時 { nop(); nop(); nop(); } void system_Ini() //系統設置初始化 { TMOD = 0x00; //選擇模式0 13位計數 最大計數8192 TH0 = (8192 - 1000)/32; TL0 = (8192 - 1000)%32 ; IE = 0x8A; //中斷 TR0 = 1; //開啟T0定時器 } void keyscan(void) { temp = 0; P1=0xF0; //高四位輸入 列為高電平 行為低電平 delay1(1); //延時 temp=P1; //讀P1口 temp=temp&0xF0; //屏蔽低四位 temp=~((temp>>4)|0xF0); if(temp1) // p1.4 被拉低 key=0; //第1個按鍵鍵值 else if(temp2) // p1.5 被拉低 key=1; //第2個按鍵鍵值 else if(temp4) // p1.6 被拉低 key=2; //第3個按鍵鍵值 else if(temp8) // p1.7 被拉低 key=3; //第4個按鍵鍵值 else key = 16; P1=0x0F; //低四位輸入 行為高電平 列為低電平 delay1(1); //延時 temp=P1; //讀P1口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==1) //第一行 p1.1 被拉低(直接temp==2 是因為我們P1.0空的,是3*4的矩陣鍵盤) key=key+0; else if(temp==2) //第一行 p1.1 被拉低(直接temp==2 是因為我們P1.0空的,是3*4的矩陣鍵盤) key=key+4; else if(temp==4) //第二行 p1.2 被拉低 key=key+8; else if(temp==8) //第三行 p1.3 被拉低 key=key+12; else key = 16; // // dis_buf = key; //鍵值入顯示緩存 // dis_buf = dis_buf & 0x0f; if(key16) { flag0=0; } if(key!=16) { if(key0&&flag00) { flag0=1; if(a0); else if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=0; a++; if(flag2==1) b++; } } else if(key==1&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=1; a++; if(flag2==1) b++; } } else if(key==2&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=2; a++; if(flag2==1) b++; } } else if(key==3&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=3; a++; if(flag2==1) b++; } } else if(key==4&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=4; a++; if(flag2==1) b++; } } else if(key==5&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=5; a++; if(flag2==1) b++; } } else if(key==6&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=6; a++; if(flag2==1) b++; } } else if(key==7&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=7; a++; if(flag2==1) b++; } } else if(key==8&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=8; a++; if(flag2==1) b++; } } else if(key==9&&flag0==0) { flag0=1; if(a<4) { Display_Buffer[0]=Display_Buffer[1]; Display_Buffer[1]=Display_Buffer[2]; Display_Buffer[2]=Display_Buffer[3]; Display_Buffer[3]=9; a++; if(flag2==1) b++; } } else if(key==10&&flag0==0) { flag0=1; if(a<4&&flag2==0) { Display_Buffer[3-a]=0; if(a==0) a=1; b=1; flag2=1; } } else if(key==11&&flag0==0) { flag0=1; a=0; b=0; Display_Buffer[0]=Display_Buffer[1]=Display_Buffer[2]=Display_Buffer[3]=0; flag2=0; } } } void main(void) //主函數 { uchar i; system_Ini(); //系統設置初始化子程序 a=4; b=4; ledg=0; ledr=1; while(1) //大循環 { keyscan(); if(K10) { while(K10); flag1=~flag1; a=0; b=0; Display_Buffer[0]=Display_Buffer[1]=Display_Buffer[2]=Display_Buffer[3]=0; flag2=0; if(flag1==1) { ledg=1; ledr=0; } else { ledg=0; ledr=1; } } } } void T0zd(void) interrupt 1 //3定時器1的中斷號 1定時器0的中斷號 0外部中斷1 2外部中斷2 4串口中斷 { TH0 = (8192 - 1000)/32; //1ms裝載初值 保險,卡頓 TL0 = (8192 - 1000)%32; if(flag1==1) { Num1=0; wei1=wei2=wei3=wei4=0; } else Num2++; Num1++; if(Num2>10) //掃描數碼管程序 { Num2=0; n++; wei1=wei2=wei3=wei4=0; P0=0xff; if(n>3) n=0; if(n==0) { if(a!=4) P0=0xff; else { if(b==4) P0=table_dd[Display_Buffer[n]]; else P0=table_dm[Display_Buffer[n]]; } wei1=0; wei2=1; wei3=1; wei4=1; } else if(n==1) { if(a<3) P0=0xff; else { if(b==3) P0=table_dd[Display_Buffer[n]]; else P0=table_dm[Display_Buffer[n]]; } wei1=1; wei2=0; wei3=1; wei4=1; } else if(n==2) { if(a<2) P0=0xff; else { if(b==2) P0=table_dd[Display_Buffer[n]]; else P0=table_dm[Display_Buffer[n]]; } wei1=1; wei2=1; wei3=0; wei4=1; } else if(n==3) { if(b==1) P0=table_dd[Display_Buffer[n]]; else P0=table_dm[Display_Buffer[n]]; wei1=1; wei2=1; wei3=1; wei4=0; } } }
上一篇:單片機之LED點陣
下一篇:51單片機實現8x8LED燈陣動態顯示移動文字
推薦閱讀
史海拾趣
在市場競爭日益激烈的情況下,E-San Electronic Co Ltd積極尋求市場拓展的新策略。公司通過與國內外知名企業的合作,成功進入了國際市場。同時,公司還加大了對新興市場的開拓力度,通過參加各種國際展會和商務活動,提升了品牌知名度和影響力。此外,公司還積極探索線上線下相結合的銷售模式,通過電商平臺和社交媒體等新興渠道拓展銷售渠道。
Deltron Emcon,即現在的DEM Manufacturing,起源于四家英國制造企業的合并。這些企業分別是成立于1946年的Deltron Components,專業音頻連接器和壓鑄盒制造商Roxburgh EMC(成立于1969年),EMC濾波器和組件的制造商Media Products(成立于1990年),以及廣播跳線產品制造商BES Electronics(成立于1982年)。這些公司在各自的領域內都有著豐富的經驗和卓越的技術,合并后,DEM Manufacturing憑借這些優勢,在電子行業中迅速嶄露頭角。
隨著科技的發展,Equinox意識到數字化對于提升客戶體驗的重要性。因此,公司開始投入大量資源建設數字平臺,提供在線預約、課程購買、健康管理等服務。這些數字化功能不僅方便了客戶,還提高了公司的運營效率。
理念:作為一家負責任的企業,Hartmann Codier GmbH始終將環保理念貫穿于產品研發、生產和銷售的全過程中。公司嚴格遵守RoHS/WEEE等國際環保標準,杜絕使用或包含六種有毒重金屬物質。
實踐:在產品設計階段,公司就充分考慮環保因素,采用環保材料和工藝;在生產過程中,公司加強了對廢棄物的處理和回收利用;在產品銷售后,公司還提供了完善的回收服務。這些措施不僅降低了產品對環境的影響,還提升了企業的社會形象。
隨著技術的不斷發展,芯佰微逐步拓展了自己的產品線,覆蓋了放大器、接口電路、電源管理、時間數字轉換器、DAC數模轉換、ADC模數轉換等多個領域。同時,公司積極開拓國內外市場,與眾多知名企業建立了合作關系,將產品廣泛應用于手持移動終端、消費類電子產品、個人電腦及周邊設備、網絡通信設備、醫療設備、辦公設備等多個領域。這些努力使得芯佰微的產品在市場上獲得了廣泛認可。
各位大蝦,小弟最近遇到一個關于cpu寄存器讀寫的問題,望不吝賜教 我在bootloader里面,對cpu里面的控制寄存器進行,但是無法寫成功。比如:*(UINT32 *)(CAP_Reg_Addr_Base+0x0008)=0x10000000;進行寫時,會死在這里。對其他的寄存器也是這樣。這 ...… 查看全部問答∨ |
|
我的平臺是S3C2410(ucos-ii)+MC35I,在UCOS上移植了LWIP1.3.1 ,但是我不知道該怎樣應用LWIP1.3.1里面給定的函數實現GPRS通信,有人有相關方面的代碼或者實例嗎?謝謝,急… 查看全部問答∨ |
我用的是WinCE5.0, HPC部分在explorerbase.rc增加自己的圖片 a. 如果是sysgen或build sysgen生成的image,執行LoadImage自己的圖片時,失敗,GetLastError()返回1814 b. 如果是sysgen或build sysgen HPC,然后再make run-time im ...… 查看全部問答∨ |
1.硬件工程師(急) 職位要求: 1.本科或以上學歷,通信,電子,計算機相關專業,1年以上硬件開發工作經驗。大專學歷,2年以上經驗; 2.熟悉嵌入式系統硬件開發,有32位嵌入式系統硬件電路設計經驗(熟練使用Protel、ORCAD等,能獨 ...… 查看全部問答∨ |
|
前邊,我講完了 51單片機 的 尋址方式 和 指令系統,以及幾個傳統8051都有的基本內部資源(所謂傳統8051,或者51單片機,在大多數情況下,請當它們是一回事。)現在我們來講一下,我們實際如何寫程序,因為只是舉例,而且篇幅關系,我們只寫一個很 ...… 查看全部問答∨ |
|
剛開始的工作時,有次去電子市場買東西,有個先生問我,會不會430,當時壓根就沒聽說過,因為只會51了,也沒在意。后來進了公司,正好遇到在做項目,基于PIC的,程序別人已經寫好了,只是要修改,我略懂一點,也就 ...… 查看全部問答∨ |
前期問了ADC的實驗問題,但一直沒得到解答,現在終于做出來了,分享給大家 實驗效果是:采樣電壓大于1.5v燈就亮,反之燈暗。。 注意:每次調整完滑動變阻器都要重新仿真 后期會改進,用1602或UART顯示電壓數字和實時采樣 [ 本帖最后由 shmily53 ...… 查看全部問答∨ |