资源简介
附有实验板原理图,主要是51单片机利用8255扩展IO口,利用8255接入独立按键,矩阵键盘,并有一个详细的秒表程序,秒表有开始(继续)、记录数据、查询数据、复位功能,四位数码管动态显示分秒,两个数码管通过串行输入显示秒的下一个单位。
代码片段和文件信息
//程序名:KeyBoard_8255_Apply
//功能描述:1.开机后,按下OPEN(K12)显示HELLO-;
//2.按下RUN(K13)后,后两位开始计数00-99;
//3.按下STOP(K15)后,停止运行,继续显示HELLO- ;
//4.按下+1(K14)后,对四位数码管的最后一位做+1调整,0-9;
//硬件电路,J8中1,3短接,独立按键
//调用函数:Disp_HELLO();Disp_number();Disp_increment();
//Set_Init_Timer1();Delayx1ms(uint cout);
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define COM8255 XBYTE[0XFFFF]
#define PA8255 XBYTE[0XFFFC]
#define PB8255 XBYTE[0XFFFD]
#define PC8255 XBYTE[0XFFFE]
sbit P1_2 = P1^2;
sbit P1_1 = P1^1;
sbit P1_0 = P1^0;
sbit SLCK = P2^4;
//函数声明
void Disp_HELLO();
void Disp_number();
void Set_Init_8255();
void Delayx1ms(uint count);
void Set_Init_Timer1();
void Disp_increment();
uchar code dis_HELL[]={0x890x860xc70xc7}; //四位数码管HELL
uchar code dis_number[]={0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf6}; //四位串并转换控制数码管0-9
uchar code dis_count[]={0xc00xf90xa40xb00x990x920x820xf80x800x900xff};//四位数码管0-9,
uchar number=0numberhnumberli=0j=0;
void main()
{
Set_Init_Timer1();
do{
Set_Init_8255();
switch(PB8255)
{
case 0xef: Disp_HELLO(); break; //K12按下
case 0xdf: TR1=1; Disp_number(); break; //K13按下
case 0xbf: Disp_increment(); break; //K14按下
case 0x7f: Disp_HELLO(); break; //K15按下
}
}while(1);
}
void Set_Init_Timer1() //定时器1初始化
{
TMOD =0X10; //Timer 1Moder 1
TH1 =0X3C; //50ms定时
TL1 =0XB0;
EA =1;
ET1 =1;
}
/*******************************************************/
//函数名:Run_Timer1() interrupt 3 using 1
//功能:利用定时器精确定时50ms
//说明:定时器1中断服务程序
/*******************************************************/
Timer1_int() interrupt 3 using 1
{
static unsigned char count =0;
TH1 =0X3C; //50ms定时
TL1 =0XB0;
count ++;
if(count ==20) //每秒时间到
{
number++;
count =0;
if(number==99)
{
number=0;
}
}
}
/******************************************************/
//函数名:Disp_HELLO();
//功能:动态显示HELL串行口移位寄存器工作显示o-
//调用函数 Delayx1ms(5)
/******************************************************/
void Disp_HELLO()
{ TR1=0;
P1=0x7f; //四位数码管显示
P2=dis_HELL[0];
Delayx1ms(1);
P1=0xbf;
P2=dis_HELL[1];
Delayx1ms(1);
P1=0xdf;
P2=dis_HELL[2];
Delayx1ms(1);
P1=0xef;
P2=dis_HELL[3];
Delayx1ms(1);
SCON=0X00; //串口方式0工作
SBUF=0XFC; //发送0字符
while(! TI);
TI=0;
SLCK=0;
SLCK=1; //产生上升沿,将74HC595存储器数据输出
SBUF=0X02; //发送- 字符
while(! TI);
TI=0;
SLCK=0;
SLCK=1; //产生上升沿,将74HC595存储器数据输出
for(i=0;i<0xff;i++);//调整数码管显示效果
}
/************************************************************************/
//函数名:void Delayx1ms(uint count);
//功能:延时时间为1ms
//输入参数,1ms计数
//说明:总共延时时间为1ms x count
/*********************************************************************/
void Delayx1ms(uint c)
{
uint j;
while(c--!=0)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4383 2014-07-24 15:39 实验板程序设计\8255 IO扩展.c
文件 3384 2014-07-24 15:53 实验板程序设计\99s计时器.c
文件 262551 2014-07-27 23:11 实验板程序设计\实验板(实用版).DSN
文件 3723 2014-07-24 15:34 实验板程序设计\矩阵键盘.c
文件 4333 2014-07-27 14:10 实验板程序设计\秒表.c
目录 0 2014-07-29 10:43 实验板程序设计\
评论
共有 条评论