掌握74LS164驅動數碼管顯示和用C51編寫顯示函數的方法。能夠使數碼管上顯示的數據以左移的方式顯示出自己學號的全部(每隔1S鐘左移一位)
0e2442a7d933c89568cd82bbd31373f0830200ba.png (25.17 KB, 下載次數: 54)
下載附件
2019-7-1 09:48 上傳
單片機源程序如下:
- #include <reg51.h> //頭文件
- #define uchar unsigned char
- #define uint unsigned int //宏定義
- uchar disbuf[12];
- uchar aa,bb;
- void sx(void);
- void delay(uint z) //延時1ms函數
- {
- uint i,j;
- for(i=0;i<z;i++)
- for(j=0;j<121;j++);
- }
- void intimer1(void) interrupt 2 //外部中斷1中斷服務函數
- {
- for(aa=0;aa<12;aa++)
- {
- disbuf[aa]=17;
- } //清顯示
- }
- void display(void) //顯示函數
- {
- uchar s,n;
- code uchar tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90,
- 0xa0,0x83,0xc9,0x86,0xc1,0xe1,0xa2,0xff}; //數碼管顯示數據字型碼表
- for(s=0;s<=11;s++)
- {
- SBUF=tab[disbuf[s]]; //送顯示數據
- for(n=0;n<4;n++)
- delay(250); //軟件延時1s鐘
- }
- }
- void main(void)
- {
- EA=1;
- EX1=1;
- do
- {
- for(bb=0;bb<12;bb++)
- {
- disbuf[bb]=17;
- } //將顯示數據清零
- delay(2); //延時2MS
- sx(); //送顯示函數
- display(); //顯示函數
- }while(1);
- }
- void sx(void) //送顯示函數
- {
- disbuf[0]=0; //顯示數據的第1位
- disbuf[1]=9; //顯示數據的第2位
- disbuf[2]=1; //顯示數據的第3位
- disbuf[3]=0; //顯示數據的第4位
- disbuf[4]=1; //顯示數據的第5位
- disbuf[5]=0; //顯示數據的第6位
- disbuf[6]=1; //顯示數據的第7位
- disbuf[7]=3; //顯示數據的第8位
- disbuf[8]=2; //顯示數據的第9位
- disbuf[9]=17;
- disbuf[10]=17;
- disbuf[11]=17; //最后三位用于與下一次顯示數據區分開
- }
復制代碼
|