我也是在學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();
}
}
//============================================================
|