一毁涉、實(shí)驗(yàn)?zāi)康?
將大板上的獨(dú)立按鍵移植到小板上
二沉帮、實(shí)驗(yàn)器材:
計(jì)算機(jī)、Keil軟件贫堰、單片機(jī)(小板)穆壕、普中科技燒寫(xiě)軟件
三、代碼修改:
1.在修改代碼時(shí)其屏,首先要知道大板和小板的差異:
1)大板共陰小板共陽(yáng)喇勋;
2)大板與小板位選的控制不同,大板是3線8線譯碼器,小板沒(méi)有偎行,位選信號(hào)為4位川背;
3)獨(dú)立按鍵不同贰拿。
2.具體代碼更改:
1)小板共陽(yáng),所以每一位的段選低電平有效熄云,需要將大板上的代碼轉(zhuǎn)換為二進(jìn)制再取反膨更。
大板上字形碼程序代碼:u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-9,A-F 字形碼
改為小板上的程序代碼:u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};//0-9字形碼
2)獨(dú)立按鍵使用Init1
sbit Init1=P3^2;
3)將小板位選信號(hào)改為4位
大板代碼:
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
改為小板:
sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;
sbit LSD=P2^3;
4)switch函數(shù)的更改。應(yīng)先顯示最右一個(gè)數(shù)碼管(置0)缴允,之后左移
void DigDisplay()
{
u8 i;
for(i=0;i<4;i++) //依次顯示第1-4位數(shù)字
{
switch(i)
{
case(0):
LSA=1;LSB=1;LSC=1;LSD=0;break;
case(1):
LSA=1;LSB=1;LSC=0;LSD=1;break;
case(2):
LSA=1;LSB=0;LSC=1;LSD=1;break;
case(3):
LSA=0;LSB=1;LSC=1;LSD=1;break;
}
P0=smgduan[number[i]];//發(fā)送第i位數(shù)字的字形碼
delay(100);? ? ? ? ? //延時(shí)約1ms
P0=0xff;? ? ? ? ? ? ? //消隱 ? ? ? 大板置0無(wú)效荚守,小板置1
}
}
5)main函數(shù)的更改。須與上方保持一致 ??
完整代碼如下:
/**************************************************************************************
* 為確保數(shù)碼管顯示正常练般,請(qǐng)將JOE跳線與VCC短接 ?
***************************************************************************************/
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;
sbit LSD=P2^3;
sbit Init1=P3^2;
u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};//0-9字形碼
u8 number[4]={0,0,0,0}; //用于顯示計(jì)數(shù)值的4位數(shù)
/*******************************************************************************
* 延時(shí)函數(shù)矗漾,i=1時(shí)約延時(shí)10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 動(dòng)態(tài)數(shù)碼管顯示
*******************************************************************************/
void DigDisplay()
{
u8 i;
for(i=0;i<4;i++) //依次顯示第1-4位數(shù)字
{
switch(i)
{
case(0):
LSA=1;LSB=1;LSC=1;LSD=0;break;
case(1):
LSA=1;LSB=1;LSC=0;LSD=1;break;
case(2):
LSA=1;LSB=0;LSC=1;LSD=1;break;
case(3):
LSA=0;LSB=1;LSC=1;LSD=1;break;
}
P0=smgduan[number[i]];//發(fā)送第i位數(shù)字的字形碼
delay(100);? ? ? ? ? //延時(shí)約1ms
P0=0x00;? ? ? ? ? ? ? //消隱
}
}
void main()
{
u16 n=0, m=0; //n用于存儲(chǔ)記錄按鍵次數(shù)的值,m用于臨時(shí)變量
u8 i=0;
Init1 = 1;? ? ? //讀取IO口前先置1
while(1)
{
if (Init1 == 0)? ? ? ? //若按鍵K3按下
{
while (Init1==0);? ? //等待按鍵K3抬起薄料,確保按動(dòng)一下敞贡,計(jì)數(shù)加1
? ? ? ? ? ? ? ? ? //將此while語(yǔ)句注釋掉,會(huì)產(chǎn)生什么結(jié)果摄职?為何會(huì)這樣誊役?
n++;? ? ? ? ? ? ? //計(jì)數(shù)加1
m=n;
for (i=0;i<4;i++)? //依次將計(jì)數(shù)值n的個(gè)位、十位琳钉、百位和千位數(shù)字賦值給number[0-3]
{
number[i]=m%10;
m=m/10;
}
}
DigDisplay();? ? ? ? //調(diào)用顯示函數(shù)顯示計(jì)數(shù)值
}
}
四势木、實(shí)驗(yàn)結(jié)果:
五、實(shí)驗(yàn)反思:
實(shí)驗(yàn)過(guò)程沒(méi)有出現(xiàn)錯(cuò)誤歌懒,但是感覺(jué)自己對(duì)基礎(chǔ)知識(shí)的掌握不夠牢靠啦桌,需要再鞏固。
兩個(gè)實(shí)驗(yàn)最深的感觸:只要?jiǎng)邮志蜁?huì)有收獲及皂!