基于8086的电子万年历打印稿 下载本文

工作于方式三,OUT0输出所需频率,与8255(U10)芯片的C口相连,实现定时;B口CLK1同样与信号源相连,工作于方式一,用以产生整点报时的信号。

8253的整体结构图如图2所示。

图2 8253连接图

第三章 系统设计

3.1 总体设计

系统总设计图见图3。

时间数据 8 2 5 5 CLK(定时) A

图3总体设计图

8 0 8 6 CPU 数码管 数据 8253 系统运行后,由8253产生时钟信号,输入8255A(U10)的C口,扫描C口的

4

状态,当扫描到一个时钟信号的时候,控制秒加一,这样就实现了定时。

3.2 硬件电路设计

8086CPU与三片74LS373和两片74LS245组成最小系统,使8086工作在最小系统模式,三片74LS373的输出作为8086的地址总线(A0-A19),两片74LS245的输出作为8086的数据总线(D0-D15)。

以一片74LS138作为片选,74LS138的输入是A12-A15,输出为IO0~IO7,分别作为两片8255A和8253的片选信号。

第一片8255A(U10)的A口和B口和C口都工作在方式0(基本输入输出模式),其中A口和B口输出,C口输入(扫描时钟信号),A口作为年月日输出数码管的片选信号,B口输出年月日到八位数码管。

第二片8255A(U8)的A口和B口和C口都工作在方式0(基本输入输出模式),其中A口不用,B口和C口输入,C口用来作为时分秒和星期输出数码管的片选信号,B口用来输出时分秒和星期到数码管。

8253的0口输出时钟信号连接到第一片8255A(U10)的C口,工作在方式3,用以定时。1口用以产生闹钟信号,工作在方式0,驱动蜂鸣器发声。

八位数码管用以显示年月日,片选信号接入8255A(U10)的A口,显示信号接入8255A(U10)的B口。

三个两位数码管和一个单位数码管用来显示时分秒和星期,片选信号都接入8255A(U8)的C口,显示信号接入8255A(U8)的B口。 硬件电路连接图:

5

3.3 软件编程设计

3.3.1 汇编程序流程图

开始

判断闰年、月大、月图3 汇编程序流 小,时间处理 初始化两片8255和8253 写入数据产生片选信号和时间信号 送入数码管显示 6

3.3.2 程序解析

//第一片8255

#define IOCON 8006H #define IOA 8000H #define IOB 8002H #define IOC 8004H

//第二片8255

#define IOCON1 9006H #define IOA1 9000H #define IOB1 9002H #define IOC1 9004H //8253

#define A_0 0xA000 #define A_1 0xA002 #define A_2 0xA004 #define A_CON 0xA006

int table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int xqing[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};//星期1..7 int shuma[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //变量声明

int n1;//年份的千位 int n2;//年份的百位 int n3;//年份的十位 int n4;//年份的个位 int nianx;

int y1;//月份的十位 int y2;//月份的个位 int yuex;

int t1;//天的十位 int t2;//天的个位 int tianx;

int s1;//小时的十位 int s2;//小时的个位 int f1;//分钟的十位 int f2;//分钟的个位 int fenx;

int m1;//秒的十位 int m2;//秒的个位 int miaox; int xq;//星期

7

//共阳极编码0..9