|
昨天用的共陰數(shù)碼管,普通IO口,亮度一般,今天重新焊了個(gè),順手拿了個(gè)共陽數(shù)碼管,昨天的程序已經(jīng)不能正常工作了,O1的順序要調(diào)反,另外,位選的IO口要設(shè)置成推挽方式,學(xué)習(xí)了。
P?M0=0;P?M1=0X3C; 我用的2345 IO口,00111100換算成16進(jìn)制就是3C了。在這之前花了2個(gè)小時(shí),調(diào)段選的推挽,浪費(fèi)了2個(gè)小時(shí)。
第二次用少引腳 的單片機(jī),之前用過STC12C5608,是買的流水燈散件,被控件少這種芯片非常舒服。
制作出來的實(shí)物圖如下:
51hei圖片_20220107191340.jpg (241.64 KB, 下載次數(shù): 82)
下載附件
2022-1-7 19:13 上傳
51hei圖片_20220107191333.jpg (100.78 KB, 下載次數(shù): 72)
下載附件
2022-1-7 19:13 上傳
單片機(jī)源程序如下:
***********************************************************/
#include<STC12C2052.H>
#define uchar unsigned char
#define uint unsigned int
//以下定義是用于EEPROM
#include<intrins.h>
#define nop _nop_()
//以上定義是用于EEPROM
sbit K1=P3^0; //清翔板的S4
//sbit K2=P3^3; //清翔板的S3
//sbit K1=P3^5; //清翔板的S1
//sbit BEEP = P3^6 ; //蜂鳴器
sbit SMG0=P3^2;
sbit SMG1=P3^5;
sbit SMG2=P3^4;
sbit SMG3=P3^3;
uint fmqz; //用于蜂鳴器延時(shí)
uchar a1,a2,a3,a4;
uint ys;
uint t0z,t0z1;
uint eepromz ;
uchar code table[]={0x28,0xEE,0x32,0xa2,0xE4,0xA1,0x21,0xEA,0x20,0xA0};// 定義段碼
void delay(uint n)//延時(shí)
{
uint x;
while(n--)
{
x=50;
while(x--);
}
}
void disp(uchar n3,n2,n1,n0)//顯示子程序
{
P1=table[n3];//開段選
SMG3=1; //開位選
delay(5); //延時(shí)
SMG3=0;
P1=table[n2];//開段選
SMG2=1; //開位選
delay(5); //延時(shí)
SMG2=0; //開位選
P1=table[n1];
SMG1=1; //開位選
delay(5);
SMG1=0; //開位選
P1=table[n0];
SMG0=1; //開位選
delay(5);
SMG0=0; //開位選
}
void main()
{
P3M0=0; P3M1=0X3C; //p1口強(qiáng)推挽
TMOD=0x01;//定時(shí)器工作方式1
TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號
TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號
ET0=1;//開定時(shí)器中斷
EA=1;//開總中斷
TR0=1;//啟動(dòng)定時(shí)器
while(1)
{
// a1=eepromz/1000; //分離出a的千位
// a2=eepromz%1000/100; //分離出a的百位
// a3=eepromz%100/10; //分離出a的十位
// a4=eepromz%10; //分離出a的個(gè)位
a1=t0z1/1000; //分離出a的千位
a2=t0z1%1000/100; //分離出a的百位
a3=t0z1%100/10; //分離出a的十位
a4=t0z1%10; //分離出a的個(gè)位
disp(a1,a2,a3,a4);//顯示數(shù)字
if(K1==0){ delay(5);if(K1==0){ delay(5);eepromz++;}}
}
}
void Timer0_Routine(void) interrupt 1
{
unsigned char a;
TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號
TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號
a++;//定時(shí)器循環(huán)計(jì)數(shù)20次為一秒
if(a>=2){//定時(shí)器循環(huán)計(jì)數(shù)20次為一秒
a=0;//次數(shù)清零,從新循環(huán)計(jì)數(shù)
t0z1++;//秒加一
}
}
|
評分
-
查看全部評分
|