我也是在学C语言,这是我写的
如果你是用别的单片机型号,有上拉电阻也是可以亮灯的,延时部分要改一下,因为我这是24MHZ的
/*=========================================================================================
名称:单片机按键加1程序
作者:老玉
日期:20210625
最后更新日期:20210627
电路编号:YGG_20210413.0_ST
MCU:STC88A4KS32
使用片上24MHZ时钟,
功能描述:这是学习C8051用的入门程序,单片机按键加1,单击加一次,长按一直加,并显示
;=========================================================================================*/
#include <REG52.h>
#define OUT P0 //输出显示
sbit KEY=P3^2; //按键
sbit com0=P2^0; //数码管的COM引脚
sbit com1=P2^1;
sbit com2=P2^2;
sbit com3=P2^3;
sfr P0M0=0x94; //stc8A4K端口控制寄存器
sfr P0M1=0x93;
unsigned int NUM;
//=================================================
void delay(unsigned char i) //延时
{
unsigned int k;
for(i;i>0;i--)
{
for(k=1000;k>0;k--);
}
}
//=====================================================================================
unsigned char ledtab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
//=====================================================================================
void display()
{
unsigned char bat;
if(NUM>1000)NUM=0x00;
bat=NUM%10; //显示个位
OUT=ledtab[bat];
com0=0;
delay(10);
com0=1;
bat=NUM%100/10; //先求余100,再除以10,等到十位数
OUT=ledtab[bat];
com1=0;
delay(10);
com1=1;
bat=NUM%1000/100;
OUT=ledtab[bat];
com2=0;
delay(10);
com2=1;
bat=NUM/1000;
OUT=ledtab[bat];
com3=0;
delay(10);
com3=1;
}
//==================================================================================
void main() //主程序
{
P0M0=0xff;
P0M1=0x00;
KEY=1;
while(1)
{
unsigned char t;
if(!KEY)
{
for(t=0;t<10;t++)display();
NUM++;
}
display();
}
}
//============================================================
|