main.c
来自「89s51单片机做的计数器」· C语言 代码 · 共 158 行
C
158 行
////////////////////////////
//private counter
//cjy 2006 11.28 at GDUT
///////////////////////////
#include "reg51.h"
#include"24c02.h"
////////端口定义///////////
#define data_port P0
#define bit_port P2
sbit total_led =P3^1;//总计数LED
sbit src =P3^0;//可控硅
sbit relay =P3^6;//继电器
///////按键定义///////////
#define set 1
#define right 2
#define up 3
#define rst 4
/////////led数码管笔画表////////////
unsigned char code led_tab[]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x88,/*A*/
0x83,/*b*/
0xBF,/*-*/};
///////函数声明/////////////////////
void sys_init(void);
void delay(unsigned int t);
void led_diplay(void);
unsigned char scan_key(void);
unsigned char get_key(void);
void conver(void);
void read_all(void);
///////变量声明/////////////////////
unsigned char buff_pointer=0;
struct buff
{
unsigned char bits[7];
unsigned int num;
};
struct buff led_buff[3];
////////////主函数//////////////////
void main(void)
{
sys_init();//系统初始化
x24c02_init();//初始化EEPROM
//read_all();//从EEPROM读出各个计数值
led_buff[0].num=12345;
while(1){
conver();
led_diplay();}
while(1)
{
//unsigned char key;
switch(get_key())
{
case set: ; break;
case right: ; break;
case up: led_buff[0].num-- ; break;
case rst: led_buff[0].num++ ; break;
default: ; break;
}while(1){
conver();
led_diplay();}
}
}
//INT0中断服务程序
void INT0_ISR (void) interrupt 0
{
total_led=~total_led;
//src=~src;
//relay=~relay;
}
void sys_init(void)
{
//这里编写需要初始化的参数
total_led=0;
IT0=1;//负边缘触发
EX0=1;//开INT0中断
EA=1;//开总中断
}
unsigned char scan_key(void)
{
unsigned char result=0;
P1|=0x78;//01111000
//if(P1&0x78!=0x78)
switch (P1&0x78)
{
case 0x38: result=1; break;
case 0x58: result=2; break;
case 0x68: result=3; break;
case 0x70: result=4; break;
default: result=0; break;
}
return result;
}
unsigned char get_key(void)
{
unsigned char temp1,key_num=0;
unsigned int i=8000;//按键时间
if((temp1=scan_key())!=0);
{
delay(30);
if(temp1==scan_key())
{
key_num=temp1;
while(scan_key()!=0&&i--);//放开按键或时间到都可以退出循环
}
}
return key_num;
}
void delay(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++)//
;
}
void conver(void)
{
unsigned int i;
unsigned char j;
i=led_buff[buff_pointer].num;
for(j=0;j<6;j++)
{
led_buff[buff_pointer].bits[j]=i%10;
i/=10;
}
}
void led_display(void)
{
unsigned char k,temp,num;
temp=0x80;
for(k=0;k<6;k++)//从右到左扫描,低位到高位
{
num=led_buff[0].bits[0];
data_port=led_tab[num];
bit_port=~temp;
temp=temp>>1;
delay(300);
bit_port=0xff;//消除鬼影
//delay(10);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?