|
|
每天做飯,電飯煲的4位數(shù)碼管開始工作后都會動態(tài)流動,想了想思路,就寫了這個代碼,有個小問題,流動的速度不一致,1-實物是STC15W408A,仿真用的AT89C52,2-單個筆劃的速度沒改一致,1,實物的4位數(shù)碼管是按自己的好走線方式焊的,沒有按標(biāo)準(zhǔn)焊,所以代碼和標(biāo)準(zhǔn)的不一樣。
2,完整的代碼包含很多,所以只上傳數(shù)碼管模仿電飯煲工作部分的代碼。
另外,不知道仿真怎么做成小動態(tài),所以沒有辦法在線預(yù)覽,再進(jìn)仿真看,哈,就是電飯煲在工作啦。
以下是代碼部分
大概1K的ROM空間,如果有時間改改,應(yīng)該能減少一半
思路大概來說,就是用數(shù)碼管靜態(tài)顯示的方式,來顯示任意的筆劃。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖_20220209213202.png (42.36 KB, 下載次數(shù): 37)
下載附件
2022-2-9 21:35 上傳
單片機(jī)源程序如下:
void smgkj00() //點(diǎn)亮最開始一點(diǎn)
{
SMG3=0; //開位選
P1=0X04;delay(1800); //延時
}
void smgkj01()
{
SMG3=SMG2=0; //開位選
P1=0X04; delay(1800); //延時
}
void smgkj02()
{
SMG3=SMG2=SMG1=0; //開位選
P1=0X04; delay(1800); //延時
}
void smgkj03()
{
SMG3=SMG2=SMG1=SMG0=0; //開位選
P1=0X04; delay(1800); //延時
}
void smgkj04()
{
P1=0X04;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj05()
{
P1=0X04;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj06()
{
P1=0X04;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj07()
{
P1=0X04;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj08()
{
P1=0X04;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04+0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj09()
{
P1=0X04+0X40;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04+0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj10()
{
P1=0X04+0X40+0X80;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04+0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj11()
{
P1=0X04+0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04+0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
//關(guān)閉
void smgkj00_0()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X04+0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_1()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X04+0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_2()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X04+0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_3()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X01+0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_4()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X10+0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_5()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X40; //顯示右側(cè)上一豎
SMG0=0; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_6()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
P1=0X40;
SMG1=0; //開位選
delay(5);
SMG1=1; //開位選
P1=0X40; //顯示右側(cè)上一豎
SMG0=1; //開位選
delay(5);
SMG0=1; //開位選
}
void smgkj00_7()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
P1=0X40;//開段選
SMG2=0; //開位選
delay(5); //延時
SMG2=1; //開位選
}
void smgkj00_8()
{
P1=0X40+0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
}
void smgkj00_9()
{
P1=0X80+0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
}
void smgkj00_10()
{
P1=0X02;//開段選
SMG3=0; //開位選
delay(5); //延時
SMG3=1;
}
void smgkj00_11()
{
P1=0X02;//開段選
SMG3=1; //開位選
delay(5); //延時
SMG3=1;
}
void smginit()
{
uint i;
smgkj00();
smgkj01();
smgkj02();
smgkj03();
for(i=200;i>0;i--){ smgkj04();}
for(i=200;i>0;i--){ smgkj05();}
for(i=200;i>0;i--){ smgkj06();}
for(i=200;i>0;i--){ smgkj07();}
for(i=200;i>0;i--){ smgkj08();}
for(i=200;i>0;i--){ smgkj09();}
for(i=200;i>0;i--){ smgkj10();}
for(i=200;i>0;i--){ smgkj11();}
for(i=200;i>0;i--){ smgkj00_0();}
for(i=200;i>0;i--){ smgkj00_1();}
for(i=200;i>0;i--){ smgkj00_2();}
for(i=200;i>0;i--){ smgkj00_3();}
for(i=200;i>0;i--){ smgkj00_4();}
for(i=200;i>0;i--){ smgkj00_5();}
for(i=200;i>0;i--){ smgkj00_6();}
for(i=200;i>0;i--){ smgkj00_7();}
for(i=200;i>0;i--){ smgkj00_8();}
for(i=200;i>0;i--){ smgkj00_9();}
for(i=400;i>0;i--){ smgkj00_10();}
for(i=400;i>0;i--){ smgkj00_11();}
}
Keil代碼與Proteus仿真下載:
仿真代碼.7z
(58.78 KB, 下載次數(shù): 25)
2022-2-9 22:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|