📄 ledkey.c
字号:
/*
//************************************************************************* //
//
//
// COPYRIGHT (c) 2006 BY FOSHAN LX.
// -- ALL RIGHTS RESERVED --
//
// File Name: UFMAIN.C
// Author: guobin
// Created: 2006/04/20
// Modified:
// Revision: 2.0
//
//*************************************************************************
*/
//CPU: P89LPC932A1 8K Flash 256+512Byte RAM
//Crystal:12MHz Fosc=12M
//DIVM=0 CCLK=Fosc=12M
//Single INS=6M=166ns
#include <stdio.h>
#include <string.h>
#include "hardware.h"
unsigned char LLEDData,RLEDData;
bit bdata CLRFlag;
unsigned char KeyCount;
bit bdata KeyReleaseFlag;
unsigned char KeyEvent;
unsigned char TestData;
void (*ISP)();
//P00(O) P01(O) P02(O) P03(O) P04(O) P05(O) P06(O) P07(O)
//P10(O) P11(I) P12(O) P13(I/O) P14(I) P15(I) P16(O) P17(O)
//P20(I/O) P21(I/O) P22(I/O) P23(I/O) P24(I/O) P25(I/O) P26(I/O) P27(I/O)
void GPIO_Initial(void)
{
P0M1=0x00;
P0M2=0x00;
P1M1=0x20;
P1M2=0x00;
P2M1=0x00;
P2M2=0x00;
}
void ISP_Initial(void)
{
ISP=0x1F00;
if(!Key)
ISP();
SSTAT=0xFA;
BRGCON=0x00;
AUXR1=0x40;
SCON=0x50;
BRGR1=0x04; //cystal=12M baund=9600(0x04d2)-----baund=cclk/((brgr1,brgr0)+16)
BRGR0=0xD2;
BRGCON=0x03;
}
/*
位段编码对应关系:
数码管位:a b c d e f g dp
74HC164: Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
Q对应输出1点亮相应的位,比如显示1---写74HC164数据01100000(0x60)
*/
code UCHAR LEDCode[]= //数码管编码表
{
0xFC, //'0'
0x60, //'1'
0xDA, //'2'
0xF2, //'3'
0x66, //'4'
0xB6, //'5'
0xBE, //'6'
0xE0, //'7'
0xFE, //'8'
0xF6, //'9'
};
/*
写74HC164函数
入口参数:写1个字节数据
出口参数:无
*/
void HC164(UCHAR Dat)
{
UCHAR i;
HC164_CLK=0;
for(i=0;i<8;i++)
{
if(Dat&0x01) //移为顺序:LSB位先移出
HC164_AB=1;
else
HC164_AB=0;
HC164_CLK=1;
HC164_CLK=0;
Dat>>=1;
}
}
void ScanLEDOutput(void)
{
NLEDR=NLEDL=1;
if(CLRFlag)
{
CLRFlag=0;
HC164(LEDCode[RLEDData]);
NLEDR=0;
}
else
{
CLRFlag=1;
HC164(LEDCode[LLEDData]);
NLEDL=0;
}
}
void T0_Initial(void)
{
TMOD&=0xf0;
TMOD|=0x01;
TH0=0x8A; //5MS
TL0=0xD0;
TR0=1;
ET0=1;
EA=1;
}
void T0_IRQ(void) interrupt 1
{
TH0=0x8A;
TL0=0xD0;
ScanLEDOutput();
if(Key)
{
KeyCount=0;
KeyReleaseFlag=1;
}
else
{
KeyCount++;
if((KeyCount==20)&&KeyReleaseFlag)
{
KeyEvent=1;
KeyReleaseFlag=0;
}
}
}
void main(void)
{
GPIO_Initial();
ISP_Initial();
T0_Initial();
while(1)
{
if(KeyEvent)
{
KeyEvent=0;
TestData++;
if(TestData==100)
TestData=0;
LLEDData=TestData/10;
RLEDData=TestData%10;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -