8155_7221c语言程序
单片机应用技术C语言任务6 8155扩展键盘与显示
6.1.2 控制程序
PC=0x0f; PA=*(p+1); PC=0xfd; key=PB; key&=0x0f; delay(50); switch(key) {case 0x0e:Data=4;break; case 0x0d:Data=5;break; case 0x0b:Data=6;break; case 0x07:Data=7;break; default: break; }
下午10时25分28秒
《单片机应用技术》课件制作组
6.1.1 硬件电路及工作原理
1.硬件电路
8155接口芯片 扩展4个LED
扩展16个行列扫 描矩阵键盘
下午10时25分28秒 《单片机应用技术》课件制作组
74LS07为LED 的位驱动
6.1.1 硬件电路及工作原理
2 工 作 原 理
PA口设置为输出 控制方式,作为 LED的段码端 PC口设置为输出控 制方式,作为LED 的位控制端
★
任务目标
任务描述 任务载体 相关知识
利用8155接口芯片扩展3×7键盘及7个LED显示器 计算机、单片机仿真器、G2010+实验平台 单片机系统扩展
《单片机应用技术》课件制作组
下午10时25分28秒
6.1.1 硬件电路及工作原理
1.硬件电路
在一般的仪表、测控系统中,通常需要有许多位 LED显示和许多个按键,比如需要16位LED显示, 32个输入按键。如果直接使用单片机的I/O口来连接, 单片机I/O口似乎不够用。像这种显示、按键比较多 的场合,通常采用扩展通用可编程I/O扩展芯片来实 现,其中8155是最常用的一个I/O扩展芯片。扩展一 片8155,不仅扩展了单片机的I/O口,还扩展了256 B的RAM和一个14 bit的减法定时/计数器。
8155实验
实验1 8155并口扩展实验【实验目的】掌握单片机与8155的接口原理,熟悉对8155的初始化编程和输入、输出程序的设计方法。
【实验设备及器件】IBM PC机一台DP - 51PROC 单片机综合仿真实验仪一台【实验内容】通过片外总线方式访问并口扩展芯片8155,规定A口处于输入方式接开关,B口处于输出方式接LED灯,通过B口上的LED灯实时反映A口的电平。
【实验要求】熟悉8155并行接口芯片的编程方法和应用,能够在设计电路时合理地使用8155对端口进行扩展,从而掌握它的应用技巧。
【实验步骤】1.使用2×10的排线连接A8区的J2接到A7区的J84;2.使用导线连接A7区的P2_IO5、P2_CS连接到C1区的GND;3.使用导线连接A7区的P2_IO2连接到A2区的A8;4.使用1×8的排线连接A8区的J20接到D1区的J54;5.使用1×8的排线连接A8区的J19接到D1区的J52;6.运行编写好的程序,拨动开关,观察8个LED灯的点亮情况。
【实验预习要求】认真预习本节实验内容,按照实验要求提前做好实验准备工作,认真阅读8155的数据手册。
图1.18155引脚接线图【实验参考程序】汇编语言程序清单ORG 0000HLJMP 100HORG 100Hmain:MOV SP,#60HMOV A,#02H ;写数到C/S寄存器,让B口为输出态,让A口为输入态MOV DPTR,#07FF0HMOVX @DPTR,ALOOP:MOV DPTR,#07FF1H ;读入数据MOVX A,@DPTRMOV DPTR,#07FF2H ;输出到灯MOVX @DPTR,ASJMP LOOPENDC51程序清单#include <reg52.h>#include <ABSACC.h>void main (void){XBYTE[0x7FF0] = 2; //写数到C/S寄存器,让B口为输出态,让A口为输入态while (1){XBYTE[0x7FF2] = XBYTE[0x7FF1]; //读入数据并输出到灯}}【实验思考题】1.请练习使用8155的扩展RAM功能。
51单片机8255驱动C程序
51单片机8255驱动C程序/*----------------------------------------------------------------------------------------------------------------库文件名称:driver8155.h功能描述:驱动8155,不需要了解8255的工作原理,透明操作8255的三个输入输出口PA、PB、PC读A口只需要调用rd_PA,写则需要调用wr_PA;B、C操作也一样全局变量: IO_flags,在其它程序中不能对其改写特殊说明: 无//----------------------------------------------------------------------------------------------------------------*/ #include<config.h>unsigned char const cfg_table[8]={0x80, /*10000000b, ;c=out b=out a=out*/0x90, /*10010000b, ;c=out b=out a=in */0x82, /*10000010b, ;c=out b=in a=out*/0x92, /*10010010b, ;c=out b=in a=in */0x89, /*10001001b, ;c=in b=out a=out*/0x99, /*10011001b, ;c=in b=out a=in */0x8B, /*10001011b, ;c=in b=in a=out*/0x9B, /*10011011b, ;c=in b=in a=in */};unsigned char rd_mem(unsigned char mem_ad){}void PABC_config(void ){a8255_CON=cfg_table[IO_flags];}char rd_PA(void) /*读PA口*/{unsigned char PA_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsA=1; /*置PA状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==0); /*判断状态标志位是否为高*//*控制字设置完成*/PA_data=a8255_PA; /*把PA口的数据读到PA_data*/return(PA_data); /*返回PA_data*/}char rd_PB(void) /*读PB口*/{unsigned char PB_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsB=1; /*置PB状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsB==0); /*判断状态标志位是否为高*//*控制字设置完成*/PB_data=a8255_PB; /*把PA口的数据读到PB_data*/return(PB_data); /*返回PB_data*/}char rd_PC(void) /*读PC口*/{unsigned char PC_data;ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/do{IO_flagsC=1; /*置PC状态标志位为高--输入*/IO_flags=ACC;PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsC==0); /*判断状态标志位是否为高*//*控制字设置完成*/PC_data=a8255_PC; /*把PC口的数据读到PC_data*/return(PC_data); /*返回PC_data*/}void wd_PA(unsigned char PA_data) /*写PA口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsA=0; /*置PA状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsA==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PA=PA_data; /*将PA_data的内容送到PA口*/}void wd_PB(unsigned char PB_data) /*写PB口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsB=0; /*置PB状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsB==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PB=PB_data; /*将PB_data的内容送到PB口*/}void wd_PC(unsigned char PC_data) /*写PC口*/{ACC=IO_flags; /*把状态标志字读到ACC便于进行位操作*/{IO_flagsC=0; /*置PC状态标志位为低--输出*/IO_flags=ACC; /*位操作完成,把ACC的内容写回状态标志字*/PABC_config(); /*调用配置子程序,完成对8255的设置*/ACC=IO_flags;}while(IO_flagsC==1); /*判断状态标志位是否为高为高,设置未完成,需从新设置*/a8255_PC=PC_data; /*将PC_data的内容送到PC口*/}void set_PC(unsigned char PC_num){ACC=IO_flags;IO_flagsC=0;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num|0x01);a8255_CON=PC_num;}void clr_PC(unsigned char PC_num){ACC=IO_flags;IO_flagsC=1;ACC=IO_flags;PC_num=PC_num<<1;PC_num=(PC_num&0xFE);a8255_CON=PC_num;}void main(void){set_PC(0x01);}/*---------------------------------------------------文件名称:Config.h功能描述:端口定义和RAM配置输入参数:无输出参数:无特殊说明:根据具体分配的地址,重新设定各值//----------------------------------------------------------------------------------------------------------------*/ #include <reg52.h>#include<ABSACC.H>#define a8255_PA XBYTE[0x7F7C] /*PA口地址*/#define a8255_PB XBYTE[0x7F7D] /*PB口地址*/#define a8255_PC XBYTE[0x7F7E] /*PC口地址*/#define a8255_CON XBYTE[0x7F7F] /*控制字地址*/unsigned char IO_flags; /* 用于表示PA、PB、PC的当前输入输出状态内容不能被其它程序改写,操作时ACC=IO_flags*/sbit IO_flagsA=ACC^0; /*PA的当前输入输出状态置位表示输入,复位表示输出*/sbit IO_flagsB=ACC^1; /*PB的当前输入输出状态*/ sbit IO_flagsC=ACC^2; /*PC的当前输入输出状态*/char rd_PA(void); /*读PA口*/char rd_PB(void); /*读PB口*/char rd_PC(void); /*读PC口*/void wd_PA(unsigned char PA_data); /*写PA口*/void wd_PB(unsigned char PB_data); /*写PA口*/void wd_PC(unsigned char PC_data); /*写PA口*/void PABC_config(void ); /*写8255控制字*/。
单片机实验——8155并行IO口扩展和动态扫描程序编制
单片机实验8155并行I/O口扩展和动态扫描程序编制1.实验目的(1)掌握8155并行I/O芯片扩展和使用方法(2)掌握数码管动态扫描汇编语言的编制方法2.预习要点(1)8155芯片基础知识(2)51单片机的总线时序、地址译码的原理(3)数码管动态扫描显示方法3.实验设备计算机、单片机实验箱。
4.实验内容基本要求:通过实验板的上的8155显示电路(在电路板上已经固定连接字形和字位控制线的8155部分),并通过跳线确定8155的地址,在八位数码管上显示30H到33H 存储单元的内容。
扩展要求:假定30H~33H的存储单元内容为高四位和低四位分存不同的BCD码,请依序将他们显示在LED上实验2ORG 0000H ;OGR为伪指令,不占用地址,只负责分配地址SJMP MAIN;********************************;主程序ORG 0030HMAIN:MOV SP,#70H ;可以随意用的内部RAM为30H-7FH,习惯上设置栈指针为70H LCALL INIT ;调用初始化子程序LOOP:LCALL DISPLAY;循环调用显示子程序SJMP LOOP;*********************************;初始化子程序INIT:;设置显示缓存区显示缓存区一般习惯上设为30H-37HMOV 30H,#1MOV 31H,#2MOV 32H,#3MOV 33H,#4MOV 34H,#5MOV 35H,#6MOV 36H,#7MOV 37H,#8;初始化8155 ;8155地址:1、控制字**00H PA为**01H PB为**02H PC为**03HMOV DPTR,#0100H ;8155控制字地址MOV A,#03H ;03H=0000 0011B A口B口为输出C口为输入具体看第5章MOVX @DPTR,ARET;**********************************;显示子程序DISPLAY:MOV R0,#30H ;每次进显示子程序的时候先从显示缓存区的第一个开始显示MOV R3,#0FEH ;R3为字位,控制哪个数码管亮【注意,每次只点亮一个数码管】LD0: ;控制字位MOV DPTR,#0102H ;把字位端PB的地址送DPTRMOV A,R3 ;把字位送AMOVX @DPTR,A;把字位送PB口;查表MOV DPTR,#DTAB ;把字形表的首地址给DPTRMOV A,@R0 ;把要查的字送AMOVC A,@A+DPTR ;查到字形并赋给A;控制字形MOV DPTR,#0101H ;把字形端PA的地址送DPTRMOVX @DPTR,A;把字形送到PA口LCALL DELAY;延时INC R0MOV A,R3JNB ACC.7,LD1 ;判断最后一个管子是否亮了,亮了之后就退出显示程序RL A;让下一个管子亮,左移字位MOV R3,ALJMP LD0LD1:RET;*****************************************;字形表DTAB:DB 3FH,06H,5BH,4FH,66H ;0-F的字形DB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79HDB 71H;*******************************************;延时1ms的子程序DELAY:MOV R7,#02H ;具体延时时间T=250×2×2us=1000us=1ms (这个只是大概的,大概等于1ms而已)DEL1:MOV R6,#250 ;这个地方很多人直接写#0FFH了,这样误差也不大DEL2:DJNZ R6,DEL2 ;这条为双周期指令,所以上面250后面会乘以2 DJNZ R7,DEL1RET;********************************************实验2扩展ORG 0000HSJMP MAIN;**************************************;主程序ORG 0030HMAIN:MOV SP,#70HMOV 30H,#11H ;要显示的内容,这个自己可以随便改,MOV 31H,#22H ;只要能正确显示出来就可以了MOV 32H,#33HMOV 33H,#44HMOV DPTR,#0100H ;初始化8155 即控制字MOV A,#03HMOVX @DPTR,ALCALL SEPARA TE ;分离字LOOP:LCALL DISPLAY;循环调用显示程序SJMP LOOP;*****************************************SEPARA TE: ;分离字子程序MOV R0,#30H ;待分离的字MOV R1,#40H ;分离后的代显示的内容还是放在显示缓存区40H-47H里MOV R2,#04H ;要分离4个数据(字)R2为循环次数LP:MOV A,@R0ANL A,#0F0H ;取高4位SW AP AMOV @R1,A;存高4位INC R1MOV A,@R0ANL A,#0FH ;取低4位MOV @R1,A;存低4位INC R1INC R0 ;换下一个字DJNZ R2,LP;如果还没有转换完成就继续循环RET;*****************************************;显示子程序DISPLAY:MOV R0,#40H ;显示缓存区为40H-47H,其它的与实验二的一致)MOV R3,#0FEHLD0:MOV DPTR,#0102HMOV A,R3MOVX @DPTR,AMOV DPTR,#DTABMOV A,@R0MOVC A,@A+DPTRMOV DPTR,#0101HMOVX @DPTR,ALCALL DELAYINC R0MOV A,R3JNB ACC.7,LD1RL AMOV R3,ALJMP LD0LD1:RET;*****************************************;字形表DTAB:DB 3FH,06H,5BH,4FH,66H ;0-FDB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79HDB 71H;*****************************************;延时1msDELAY:MOV R7,#02HDEL1:MOV R6,#250DEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET;*****************************************亲爱的朋友,上文已完,为感谢你的阅读,特加送另一篇范文,如果下文你不需要,可以下载后编辑删除,谢谢!道路施工方案1、工程概况2、编制说明及编制依据3、主要施工方法及技术措施3.1施工程序3.2施工准备3.3定位放线3. 4土方开挖3.5卵石路基施工3.6天然砾基层施工3. 7高强聚酯土工格楞3.8水泥稳定砂砾基层施工3.9路缘石施工3. 10玻璃纤维土工格栅施工3.11沥青面层施工3. 12降水施工4、质量控制措施5、雨季施工安排6、安全技术措施1.工程概况本项目建设的厂址位于新疆石河子市。
8155可编程
DPTR,#0200H ;指向命令/状态字寄存器
题目要求初始化A口,C口为输入口,B口为输出口 (均为基本I/O)此例命令字寄存器地址是:0200H。
1
TM2
1
TM1
0
IEB B口中断
0
IEA A口中断 = = 0 1 , , 禁 允 止 许
0
PC2
0
PC1
1
PB B口 = = 0 1 , , 输 输 入 出
40 PIN
8155的 6个寄存器
AD7——AD0 选中的寄存器 功 能
X X X X X 0 0 0 X X X X X 0 0 1
X X X X X 0 1 0 X X X X X 0 1 1 X X X X X 1 0 0 X X X X X 1 0 1
命令/状态字寄存器 A口寄存器(PA7—PA0)
PA
8位
PB
6位
PC
Tin Tout
√ 8155内部有一个锁存器,故不必再需要外加74LS373 √ 由于用了P2.2接/CE;P2.1接IO/M,它的一组地址是: XXXX X01X XXXX X000 → 命令/状态字寄存器 XXXX X01X XXXX X001~010 → A,B,C口寄存器 XXXX X01X XXXX X100~101 → 定时器低/高位寄存器 √ 对8155的片内RAM寻址,必须P2.1为低,故RAM地址为: XXXX X00X 0000 0000~1111 1111等256个单元。。
并行接口的扩展(8155)
可编程RAM/ IO/ CTC接 口芯片8155: 8155与8255 是Intel推出的两 个广泛应用的并行口扩展芯片: 8255扩展了三个8位的并行口 8155扩展了两个8位并行口 + 一个6位的并行口 + 一个14位Timer + 片内256字节RAM
8155扩展输入输出
(4)读/写控制逻辑电路 接收AT89S51单片机发来的控制信号 R D 、W R 、 RESET、地址信号A1、A0等,然后根据控制信号的要求, 端口数据被AT89S51单片机读出,或者将AT89S51单片机 送来的数据写入端口。 各端口工作状态与控制信号的关系见表9-1。
16
CRWSDR
通常PA口、PB口作为输入/输出口,PC口既可作为输 入/输出口,也可在软件控制下,分为两个4位的端口,作 为端口PA、PB选通方式操作时的状态控制信号。
14
(2)A组和B组控制电路 是两组根据AT89S51写入的“命令字”控制82C55工作 方式的控制电路。A组控制PA口和PC口的上半部 (PC7~PC4);B组控制PB口和PC口的下半部 (PC3~PC0),并可用“命令字”来对端口PC的每一 位实现按位置“1”或清“0”。 (3)数据总线缓冲器 数据总线缓冲器是一个三态双向8位缓冲器,作为 82C55与系统总线之间的接口,用来传送数据、指令、控 制命令以及外部状态信息。
9
(2)81C55:可编程的IO/RAM扩展接口电路(2个8 位I/O口,1个6位I/O口,256RAM单元,1个14位的减法 计数器)。
都可以和AT89S51直接连接,接口逻辑简单。 9.2 AT89S51扩展I/O接口芯片82C55的设计 先介绍可编程并行I/O接口芯片82C55的应用特性,然 后介绍AT89S51与82C55的接口电路以及软件设计。 9.2.1 82C55芯片简介 Intel公司的可编程并行I/O接口芯片,3个8位并行I/O口, 3种工作方式,单片机与多种外设连接时的中间接口电路。 引脚及内部结构如图9-1和图9-2所示。
1
9.3 AT89S51扩展I/O接口芯片81C55的设计 9.3.1 81C55芯片介绍 9.3.2 81C55的工作方式 9.3.3 AT89S51单片机与81C55的接口设计及软件编程
单片机原理实验指导书(6)
2.1 实验六I/O及其扩展实验一、实验目的加深对MCS-51单片机I/O及其扩展知识的理解。
二、实验设备Keil C单片机程序开发软件。
DP51-PROC单片机综合实验仪。
三、实验内容和步骤内容:1)利用8155实现并行扩展。
2)利用P1端口访问CA T24WC02(兼容AT24C02)。
实验程序:程序一:使用8155实现对并行接口的扩展。
利用8155的PA口输入KEY组各按键的状态信息,然后将该状态信息通过单片机的P1口输出到LED组显示。
设计思路:主程序在完成各项初始化设置后,可进入一死循环,在该循环里面不断的读取8155 PA口的信息并将其输出到单片机的P1口。
设计参考:①8155的地址分配:命令/状态寄存器7F00HPA口7F01H②8155命令/状态寄存器:PA 0=A口输入;1=A口输出PB 0=B口输入;1=B口输出PC2PC1 00=A口、B口基本输入输出,C口输入01=A口、B口基本输入输出,C口输出10=略11=略IEA 略IEB 略TM2TM1 略③8155芯片手册8155.PDF先将单片机内部RAM 中30H~37H 单元的值复制到CAT24WC02中的00H~07H 单元。
然后又将这8个数从CAT24WC02中复制到单片机内部RAM 的40H~47H 单元中 设计参考:① CAT24WC02的器件地址: 0A0H② CAT24WC02芯片手册CA T24WCxxx.pdf预习:1) 详细阅读两个芯片手册。
2) 编写好实验程序。
3) 根据编写的程序和实验步骤的要求制定调试仿真的操作方案。
实验单元电路:1) 8155电路。
2) CAT24WC02电路。
图2.6 系统中的8155电路PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 P3.6P3.7P0.5P0.2P0.4P0.0P0.1P0.3P0.6P0.7P2_IO2P2_CS 图2.7 系统中的CAT24WC02电路SCLSDA Vcc程序一:1)关闭实验仪电源,将D1区开关SW2拨在下方,按图2.8连接实验线路后再打开实验仪电源。
第9章_8051扩展资源的C编程 + 8253+8255+8155+ (1)
8 373
D0~D7 A0 A1 8253 8 CS
CLK0
CLK1 CLK2
154
RD WR P1.7
RD WR GATE0,1,2
计数器 0
GATE0
CLK0
例 测3个通道脉冲信号的计数 率。
采用8253可同时测3个通道脉 冲信号。 程序如下:
T0
计数器 1
GATE1
CLK1
P1.7
计数器 2
GATE2
OUT
OUT
5
4
3
2
1
0(5) 4
3
2
特点: (1)与方式2相同,有自动装入计数初值的能力。 (2)计数初值为偶数时,在前一半的计数过程中输出高电平, 后一半的计数过程中输出低电平,输出波形为对称的方波。
(3)当计数初值为奇数时,输出高电平比输出低电平的 16 时间多一个时钟脉冲,波形为不对称方波。
WR
GATE
4
CW
N=4
高
3 2 1 0
OUT
方式0的三个特点: (1)控制字写入控制寄存器后,输出端OUT立即输出低 电平。写完计数初值后,若GATE为高电平,在CLK的下 降沿开始计数,输出OUT仍为低电平。当计数到0时, OUT立即输出高电平,并一直保持。
7
CLK WR
GATE
OUT 4 3 2 1 0
如 XBYTE[0x1234] = 0x56; 则等价于 mov dptr,#1234h mov @dptr,#
28
#include<absacc.h> #include<reg51.h> #define uchar unsigned char #define uint unsigned int #define COM8253 XBYTE[0x8003] #define C1 XBYTE[0x8000] #define C2 XBYTE[0x8001] #define C3 XBYTE[0x8002] #define SNUM 1 sbit P1_7=P1^7; /*门控端*/ uchar it=20; uchar sn=SNUM; uint idata BUF8253[3]; /*计数率缓冲区*/
以8155作为接口的键盘显示系统的设计
单片机原理课程设计报告设计题目:以8155作为接口的键盘显示系统的设计专业班级:自动化学号:姓名:指导教师:沈怀洋起止日期:2015年12月28日~2016年1月3日目录1.课程设计目的 (1)2.课程设计要求 (1)3.设计内容 (1)3.1设计方案 (1)3.2硬件各单元电路的设计 (2)3.2.1显示部分的设计 (2)3.2.2键盘部分的设计 (7)3.3软件设计 (10)3.3.1 程序框图 (11)3.3.2 程序清单 (12)4.总结 (14)参考文献 (14)附录 (15)1.课程设计目的(1)加深对单片机原理的理解;(2)培养实践动手能力,开发创新思维;(3)提高分析、解决问题的能力;(4)了解单片机系统开发流程。
2.课程设计要求(1)设计一个以8155作为单片机扩展并行接口的键盘显示系统;(2)设计以单片机为核心的键盘和显示系统硬件电路和软件程序,主要分为以下两部分设计:①设计单片机显示电路和显示部分软件程序;②设计单片机键盘电路和键盘部分软件程序;(3)设计总的实用电路并写出总的软件程序清单。
3.设计内容3.1设计方案根据课程设计要求,设计一个以8155作为接口的键盘显示系统,通过各硬件部分的连接原理,得到如图一所示的键盘显示系统。
图一以单片机为核心的键盘显示系统如图一所示的键盘显示系统,单片机使用8155的I/O端口扩展,通过PC口与键盘的连接接收来自键盘的信号,通过PA口发送位选信号到八段LED显示器的公共端,通过PB口发送段选信号分别连接到八段LED显示器的a—g和SP 引脚上。
这样由键盘和8155以及单片机构成键盘显示系统的键盘部分,由显示器和8155以及单片机构成键盘显示系统的显示部分,下面分别详细介绍设计。
3.2 硬件各单元电路的设计3.2.1显示部分的设计(1)显示部分概述单片机的键盘显示系统的显示部分是由8个八段LED显示器构成的。
八段LED 显示器是一种把8个LED显示段(分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段)集成在一起的显示设备,如图二所示,具有两种类型,一种是共阳型,一种是共阴型。
单片机IO扩展8155(课堂PPT)
至 中断 请 求 输入 线 至 设备 来 自设 备 至 中断 请 求 输入 线 至 设备 来 自设 备
PB
设 备数 据 线
图 8155方式4时的逻辑结构
2020/4/24
19
C口的工作方式和各位的关系见表 。
表8.5 C口的工作方式
方式1
方式2
方式3
方式4
PC0
A口中断请求
A口中断请求
PC1 PC2 PC3
定时/计数器的初始值和输出方式由高、低8位寄存器 的内容决定,初始值14位,其余两位定义输出方式。其中, 低8位寄存器存放计数初始值的低8位,高8位寄存器的格 式如下:
2020/4/24
21
M2 M1
输出方式
计数初始值高6位
1) 定时/计数器的输出方式 定时器的输出方式见表8.6。
2020/4/24
2. 作片外RAM使用
当=0,=0时,8155只能做片外RAM使用,共256 B。
其寻址范围由以及AD0~AD7的接法决定,这和前面讲到
的片外RAM扩展时讨论的完全相同。当系统同时扩展片外
RAM芯片时,要注意二者的统一编址。对这256 B RAM的
2020/4/2操4 作使用片外RAM的读/写指令“MOVX”。
22
表8.6 定时器的输出方式
M2 M1
方式
波形
00 01 10 11
在一个计数周期输出单次 方波
连续方波 在计满回0后输出的单个脉
冲 连续脉冲
2) 定时/计数器的工作
8155对内部定时器的控制是由8155控制字的D7、 D6位决定的(见图8.22),现总结如表8.7所示。
2020/4/24
23
第三部分 8051扩展资源的C编程
将data1和data2数据同时转换为模拟量的C51程序如下: include < absacc.h > include < reg51.h > define INPUTR1 XBYTE[ 0x8fff ] define INPUTR2 XBYTE[ 0xa7ff] define DACR XBYTE [0x2fff ] define uchar unsigned char void dac2b (data1 ,data2 ) uchar data1 , data2 ; {INPUTR1 = data1 ; /* 送数据到一片0832 */ INPUTR2 = data2 ; /* 送数据到另一片0832 */ DACR= 0 ; /* 启动两路D/A 同时转换 * / }
课程:单片机技术 教材:单片机的C语言应用程序设计
第三部分
8051扩展资源的C编程
教学基本要求: (1)、熟悉8255、8155接口的C编程; (2)、掌握DAC0832接口的C编程; (3)、掌握ADC0809接口的C编程; (4)、掌握键盘接口的C编程; (5)、掌握LED显示器接口的C编程。 教学重点: (1)、键盘接口的C编程; (2)、LED显示器接口的C编程。 教学难点: (1)、在Keil中调试各接口程序
1 1
0 0
0 1
定时器低8位 定时器高6位和方式
课程:单片机技术 教材:单片机的C语言应用程序设计
例:用8155控制打印机
课程:单片机技术 教材:单片机的C语言应用程序设计
下面是打印“北京SPRING 1999”的程序,其中汉字“北京” 在硬汉字库的标准机内代码为B1B1H和BEA9H。打印机与8051采 用中断的方式联络。程序名prnbyte.c.
8155详细说明
155可编程通用并行接口芯片7.4.1 8155的外部引脚及内部逻辑结构1. 外部引脚8155芯片为40引脚双列直插封装,单一的+5V电源,其引脚排列如图7.16所示。
其中::A口的输入输出信号线。
该口作输入还是输出,由软件决定。
:B口的输入输出信号线。
该口作输入还是输出,由软件决定。
:C口信号线。
该口可作输入、输出口外,还可以传送控制和状态信号,因此C口共有四种工作方式,即:输入方式(ALT1),输出方式(ALT2),A口控制端口方式(ALT3)以及A口和B口控制端口方式(ALT4)。
其工作方式由软件决定。
~:地址数据复用线。
:片选信号。
低电平有效。
图7.16 8155外部引脚:IO和RAM的选择信号。
=0,选中RAM;=1,选中IO口。
:地址锁存信号。
除了进行~的地址锁存控制外,还用于把片选信号和等信号进行锁存。
:读选通信号。
:写选通信号。
:复位信号。
复位后A口、B口和C口均为数据输入方式。
:定时器/计数器的计数脉冲输入端。
:定时器/计数器。
2. 内部逻辑结构8155的内部逻辑结构如图7.17所示。
由图可以看出,8155由三部分组成,即:存储单元为256字节的静态RAM;3个可编程的I/O,其中2个口(A口和B口)为8位口,1个口(C口)为6位口;1个14位的定时器/计数器图7.17 8155的内部逻辑结构由以上可知8155有A口、B口、C口和定时器/计数器低8位以及定时器/计数器高8位五个端口,另外8155内部还有一个命令/状态寄存器,所以8155内部共有6各端口。
对它们只需要使用即可实现编址,如表7-5所示。
表7-5 8155的端口地址编码7.4.2 8155的命令/状态字1. 8155的命令字由以上内容可知,8155的A口有输入和输出两种工作方式,B口也有输入和输出两种工作方式,而C口有输入方式(ALT1),输出方式(ALT2),A口控制端口方式(ALT3)以及A口和B口控制端口方式(ALT4)四种工作方式。
07 单片机接口技术(2)8155
3
3 3
1、内部结构
IO/ M
256B 静态 RAM A
口A PA0~PA7 口B
B
控 制 寄存器 定时器
接 单 片 机
AD0~AD7
接 外 设 接 外 设 接 外 设
CE ALE RD WR RESET
PB0~PB7 口C
C
定时器输入clk 定时器输出
PC0~PC5
日新自强 知行合一
PB
PC 输入 输出
10:ALT4
A口中断 0:禁止 1:允许 B口中断 0:禁止 1:允许
基本I/O
高3位输出 联络信号
日新自强 知行合一
15
15 15
2、8155的状态字
1)特点:只能读不能写;
和命令字共用一个地址
2)作用:寄存各端口及定时器/计数器的工作状态
3)格式
日新自强 知行合一
16
16 16
四、 8155的命令/状态字
特点:同一编址(只读/只写)
1、命令字
1)作用 (1)规定端口的工作方式 (2)规定定时器/计数器的工作方式 2)特点:只能进行写操作 3)格式
日新自强 知行合一
14
14 14
3)8155的命令字格式
D6
定时器工作方式: 00:无操作 01:停止计数 10:计满后停止 11:开始计数
第7章
系统扩展技术
日新自强 知行合一
1
1 1
7.3 输入/输出接口的扩展
8155的结构和引脚
8155的RAM和I/O的编址 8155 I/O的工作方式 8155的命令/状态字 8155的定时器/计数器
日新自强 知行合一
单片机应用技术C语言任务6 8155扩展键盘与显示
下午10时25分28秒
6.1.2 控制程序
void Disp_LED(unsigned char *p) {unsigned char key,i; PA=*(p+0); //显示个位,发段码 PC=0xfe; //显示个位,发位码 key=PB; //读入键盘行信号 key&=0x0f; //屏蔽无关位 delay(50); //延时 switch(key) //逐列判断是否有键盘按下 {case 0x0e:Data=0;break; case 0x0d:Data=1;break; case 0x0b:Data=2;break; case 0x07:Data=3;break; default: break; }
下午10时25分28秒
《单片机应用技术》课件制作组
6.1.2 控制程序
8155的初始化; ●显示及键盘扫描。
●
下午10时25分28秒
《单片机应用技术》课件制作组
6.1.2 控制程序
#include "reg51.h" #include "INTRINS.H" #include "ABSACC.H" /*定义8155的I/O端口地址,命令地址为7100H, PA=7101H,PB=7102H,PC口=7103H*/ #define IO8155_cmd XBYTE[0x7100] #define PA XBYTE[0x7101] #define PB XBYTE[0x7102] #define PC XBYTE[0x7103] sbit RES8155=P1^7; /*声明函数*/ void delay(unsigned char x); //声明延时函数 void Disp_LED(unsigned char *p); // 声明显示函数 unsigned char Buffer[4]={0,0,0,0}; //定义数码管显示缓存数组,元素等于数码管位数
8155时钟课程设计
8155时钟课程设计一、课程目标知识目标:1. 学生能理解8155时钟芯片的基本原理,掌握其内部结构及工作方式。
2. 学生能掌握8155时钟芯片的编程方法,学会编写简单的时钟程序。
3. 学生了解8155时钟芯片在生活中的应用,如电子时钟、定时器等。
技能目标:1. 学生能运用8155时钟芯片进行电路设计与搭建,具备基本的电子制作能力。
2. 学生通过编程实践,提高逻辑思维能力和问题解决能力。
3. 学生能够运用所学知识,独立完成一个简单的时钟项目。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新精神,提高学习积极性。
2. 学生在学习过程中,培养团队合作意识,学会分享与交流。
3. 学生通过了解8155时钟芯片的应用,认识到电子技术在实际生活中的重要性,增强社会责任感。
课程性质:本课程为电子技术实践课程,以学生动手实践为主,结合理论知识,培养学生的实际操作能力和创新意识。
学生特点:八年级学生具备一定的电子技术基础,对新技术充满好奇,喜欢动手实践,但需引导他们克服困难,提高问题解决能力。
教学要求:教师应注重理论与实践相结合,引导学生主动探究,关注学生个体差异,给予个性化指导,确保课程目标的达成。
同时,注重培养学生的团队合作精神和创新能力,为后续学习打下坚实基础。
二、教学内容1. 8155时钟芯片原理:讲解8155时钟芯片的内部结构、工作原理及主要功能,结合教材相关章节,使学生深入理解时钟芯片的基本概念。
2. 8155时钟芯片编程:介绍8155时钟芯片的编程方法,包括初始化、定时器设置、中断处理等,结合实例进行讲解,让学生掌握编程技巧。
3. 电路设计与搭建:教授如何利用8155时钟芯片设计简单的时钟电路,包括电路图绘制、元器件选型、电路搭建等,培养学生实际操作能力。
4. 实践项目:安排一个简单的时钟制作项目,让学生将所学知识应用于实践,提高学生的问题解决能力和创新意识。
教学内容安排和进度:第一课时:8155时钟芯片原理及内部结构,占总课时的1/4。
sdcc编译51代码
sdcc编译51代码
SDCC编译51代码是指使用SDCC (Small Device C Compiler)来编译51系列的8051芯片的代码。
以下是使用SDCC编译51代码的步骤:
1. 安装SDCC工具链:首先需要从SDCC官方网站下载并安装SDCC工具链,确保你选择的是支持51芯片的版本。
2. 编写51代码:使用任何文本编辑器编写8051芯片的C语言代码,并将文件保存为`.c`文件。
3. 编译代码:打开命令行终端,并导航到保存代码的文件夹。
使用以下命令将代码编译为8051芯片可执行文件:
```
sdcc filename.c
```
这将生成多个文件,包括`.hex`文件(可烧录到芯片上的文件)、`.asm`文件(汇编代码文件)、`.lst`文件(汇编代码的列表文件)等。
4. 烧录代码:使用烧录器将生成的`.hex`文件烧录到8051芯片上,以使其运行。
关键是要确保SDCC工具链已正确安装,并在命令行中调用编译器以生成可执行文件。
关于C++对汉字拼音的处理
关于C++对汉字拼⾳的处理直到⽬前我没有找到⽐较合适的输⼊汉字输出拼⾳的函数,那么根据⽹上流传的⼏个源码进⾏了改编,写成了输⼊汉字输出拼⾳的函数。
对于此函数不能说强⼤,但是⾄少稳定可⽤,输出结果还没有发现什么错误。
那么下⾯我将直接copy代码到这⾥,共⼴⼤⽹友参考把。
类定义:1class HanziToPinyin2 {3public:4 ~HanziToPinyin(void);56static HanziToPinyin* MakeSingleObj();78//////////////////////////////////////////////////////////////////////////910 std::string hanzi_trans_to_pinyin(const std::string &strHanzi);//获取中⽂字符串的全拼⾳11 std::string get_pinyin_by_code(int nCode);//获取指定编码的汉字拼⾳12 std::string get_first_pinyin_string(const std::wstring &wstrHanzi);//获取指定字符串(汉字)的⾸拼⾳串13 std::wstring get_first_pinyin_stringw(const std::wstring &wstrHanzi);//获取指定字符串(汉字)的⾸拼⾳串1415bool get_hanzi_code(const char *pChineseCharacter, char *pGBK, const size_t nChineseCharacter = 3, const size_t nGBK = 5);//获取指定单个汉字GBK编码,pChineseCharacter以"\0"结束16char get_first_character(const char *pGBK, const size_t nGBK = 5);//返回指定单个汉字的⾸字母171819private:20 HanziToPinyin(void);2122 };类实现:1 std::string HanziToPinyin::get_pinyin_by_code(int nCode)2 {3 std::string strPinyin;4switch(nCode)5 {6case6325:7case6436:8case7571:9case7925:10 strPinyin="A";11break;12case6263:13case6440:14case7040:15case7208:16case7451:17case7733:18case7945:19case8616:20 strPinyin="AI";21break;22case5847:23case5991:24case6278:25case6577:26case6654:27case7281:28case7907:29case8038:30case8786:31 strPinyin="AN";32break;33 strPinyin="ANG";34break;35case5974:36case6254:37case6427:38case6514:39case6658:40case6959:41case7033:42case7081:43case7365:44case8190:45case8292:46case8643:47case8701:48case8773:49 strPinyin="AO";50break;51case6056:52case6135:53case6517:54case7857:55case8446:56case8649:57case8741:58 strPinyin="BA";59break;60case6267:61case6334:62case7494:63 strPinyin="BAI";64break;65case5870:71 strPinyin="BAN"; 72break;73case6182:74case6826:75 strPinyin="BANG"; 76break;77case6165:78case7063:79case7650:80case8017:81case8157:82case8532:83case8621:84 strPinyin="BAO"; 85break;86case5635:87case5873:88case5893:89case5993:90case6141:91case6703:92case7753:93case8039:94case8156:95case8645:96case8725:97 strPinyin="BEI"; 98break;99case5946:100case5948:101case7458:102case7928:103 strPinyin="BEN"; 104break;105case6452:106case7420:107 strPinyin="BENG"; 108break;109case5616:110case5734:111case6074:112case6109:113case6221:114case6333:115case6357:116case6589:117case6656:118case6725:119case6868:120case6908:121case6986:122case6994:123case7030:124case7052:125case7221:126case7815:127case7873:128case7985:129case8152:130case8357:131case8375:132case8387:133case8416:134case8437:135case8547:136case8734:137 strPinyin="BI";138break;139case5650:140case5945:141case6048:142case6677:143case6774:144case7134:145case7614:146case7652:147case7730:148case7760:149case8125:150case8159:151case8289:152case8354:153case8693:154 strPinyin="BIAN"; 155break;156case7027:157case7084:158case7609:159case7613:160case7958:161case7980:162case8106:163case8149:164case8707:165case8752:166 strPinyin="BIAO"; 167break;168case8531:169 strPinyin="BIE"; 170break;171case5747:172case6557:173case7145:174case7167:175case7336:176case7375:177case7587:178case7957:184case5891:185case6280:186 strPinyin="BING"; 187break;188case5781:189case6403:190case6636:191case7362:192case7502:193case7771:194case7864:195case8030:196case8404:197case8543:198case8559:199 strPinyin="BO";200break;201case6318:202case6945:203case7419:204case7446:205case7848:206case7863:207case8519:208 strPinyin="BU";209break;210case6474:211case7769:212 strPinyin="CA";213break;214 strPinyin="CAI";215break;216case6978:217case7078:218case7218:219case8451:220case8785:221 strPinyin="CAN";222break;223case5687:224 strPinyin="CANG"; 225break;226case6448:227case6878:228case8309:229case8429:230 strPinyin="CAO"; 231break;232case6692:233 strPinyin="CE";234break;235case6515:236case6825:237 strPinyin="CEN";238break;239case6465:240 strPinyin="CENG"; 241break;242case6639:243case6766:244case7017:245case7230:246case7311:247case7322:248case7363:249case7942:250case7979:251case8135:252 strPinyin="CHA";253break;254case5713:255case7846:256case8091:257case8218:258 strPinyin="CHAI"; 259break;260case5770:261case5838:262case6159:263case6667:264case6893:265case6904:266case6981:267case7031:268case7086:269case7472:270case7688:271case7966:272case8324:273case8580:274 strPinyin="CHAN"; 275break;276case5686:277case5943:278case6041:279case6137:280case6660:281case6568:282case6749:283case7029:284case7047:285case7438:286case7509:287case8680:288 strPinyin="CHANG"; 289break;290case6687:297 strPinyin="CHE";298break;299case5840:300case5863:301case6251:302case6433:303case6923:304case7201:305case7320:306case7755:307case8619:308 strPinyin="CHEN";309break;310case5609:311case5984:312case7239:313case7263:314case7583:315case7810:316case7881:317case7905:318case8146:319case8241:320case8508:321 strPinyin="CHENG"; 322break;323case5749:324case6015:325case6061:326case6319:327case6374:328case6420:329case6445:330case6633:331case7042:332case7523:333case7787:334case8023:335case8101:336case8161:337case8231:338case8304:339case8355:340case8388:341case8489:342case8556:343case8746:344 strPinyin="CHI";345break;346case6091:347case6671:348case6731:349case8409:350case8430:351 strPinyin="CHONG"; 352break;353case5717:354case6492:355case6716:356case8112:357case8637:358 strPinyin="CHOU"; 359break;360case5601:361case5927:362case6680:363case6732:364case7109:365case7238:366case7290:367case7343:368case8150:369case8260:370case8573:371case8777:372 strPinyin="CHU";373break;374case6285:375case6408:376case7590:377case8563:378 strPinyin="CHUAI"; 379break;380case6622:381case6955:382case7516:383case7843:384case8413:385 strPinyin="CHUAN"; 386break;387case6675:388 strPinyin="CHUANG"; 389break;390case5879:391case7302:392case7319:393 strPinyin="CHUI";394break;395case6127:396case8040:397case8277:398 strPinyin="CHUN";399break;400case7401:401case8554:402case8626:403 strPinyin="CHUO";412 strPinyin="4337 伺"; 413break;414case6042:415case6840:416case7085:417case7193:418case7214:419case7240:420 strPinyin="CONG"; 421break;422case7308:423case7403:424case7577:425 strPinyin="COU"; 426break;427case6180:428case6562:429case6607:430case7367:431case8501:432case8530:433case8577:434 strPinyin="CU";435break;436case5764:437case6305:438case7664:439case7973:440 strPinyin="CUAN"; 441break;442case6718:443case6145:444case6393:445case7213:446case7333:447case7505:448case8631:449 strPinyin="CUI";450break;451case6666:452case8169:453 strPinyin="CUN"; 454break;455case5640:456case6547:457case7566:458case7917:459case7983:460case8078:461case8526:462case8567:463 strPinyin="CUO"; 464break;465case6239:466case6353:467case6410:468case6682:469case7007:470case8155:471case8346:472case8716:473case8718:474 strPinyin="DA";475break;476case6004:477case6316:478case6523:479case6942:480case7110:481case7173:482case8776:483 strPinyin="DAI";484break;485case5757:486case6144:487case6402:488case7373:489case7470:490case7781:491case8067:492case8087:493case8185:494case8376:495 strPinyin="DAN"; 496break;497case5852:498case5942:499case6148:500case6920:501case7724:502case7885:503case8141:504 strPinyin="DANG"; 505break;506case6322:507case6665:508case7514:509case8478:510 strPinyin="DAO"; 511break;512case7929:513 strPinyin="DE";514break;515case6466:516case6556:517case7413:526case5848:527case5901:528case5970:529case6122:530case6454:531case7023:532case7116:533case7260:534case7306:535case7475:536case7738:537case7758:538case7791:539case7965:540case8438:541case8730:542 strPinyin="DI";543break;544case6439:545 strPinyin="DIA"; 546break;547case5871:548case5967:549case6559:550case7172:551case7868:552case8116:553case8118:554case8401:555case8558:556 strPinyin="DIAN"; 557break;558case7886:559case8585:560case8684:561 strPinyin="DIAO"; 562break;563case5976:564case6006:565case6273:566case6409:567case7526:568case8012:569case8183:570case8562:571case8688:572 strPinyin="DIE"; 573break;574case5674:575case6404:576case7164:577case7575:578case7754:579case7814:580case8059:581case8184:582case8490:583 strPinyin="DING"; 584break;585case7891:586 strPinyin="DIU"; 587break;588case5977:589case6343:590case6520:591case6528:592case7517:593case7543:594case7556:595case7747:596case8020:597 strPinyin="DONG"; 598break;599case6190:600case8128:601case8229:602case8391:603 strPinyin="DOU"; 604break;605case6022:606case6429:607case6834:608case7292:609case7525:610case8328:611case8338:612case8739:613case8782:614 strPinyin="DU";615break;616case7318:617case7649:618case8393:619 strPinyin="DUAN"; 620break;621case7701:622case7713:623case7752:624 strPinyin="DUI"; 625break;626case6771:627case7632:628case7727:629case7766:630case7779:639case7876:640case8154:641case8566:642 strPinyin="DUO"; 643break;644case5612:645case5832:646case5844:647case5949:648case6035:649case6113:650case6164:651case6332:652case6721:653case6977:654case7025:655case7378:656case7581:657case7916:658case7941:659case8042:660case8206:661case8689:662 strPinyin="E";663break;664case6176:665case6284:666 strPinyin="EN"; 667break;668case5706:669case6939:670case7177:671case7879:672case8025:673case8660:674 strPinyin="ER"; 675break;676case5950:677case7732:678 strPinyin="FA";679break;680case6212:681case6232:682case6506:683case7283:684case7660:685case7818:686case8576:687 strPinyin="FAN"; 688break;689case5890:690case7242:691case7853:692case8419:693case8648:694 strPinyin="FANG"; 695break;696case6032:697case6584:698case6713:699case6839:700case6990:701case7119:702case7328:703case7572:704case7619:705case7673:706case7948:707case8082:708case8267:709case8385:710case8468:711case8613:712case8678:713 strPinyin="FEI"; 714break;715case5739:716case6915:717case7291:718case8687:719case8787:720 strPinyin="FEN"; 721break;722case5726:723case5926:724case6155:725case6384:726case6767:727case7731:728 strPinyin="FENG"; 729break;730 strPinyin="FO"; 731break;732case8330:733 strPinyin="FOU"; 734break;735case5775:736case5776:737case5914:738case6029:739case6062:740case6119:741case6142:742case6252:743case6327:752case7285:753case7471:754case7680:755case7741:756case7774:757case7775:758case7823:759case7991:760case8005:761case8222:762case8261:763case8280:764case8283:765case8479:766case8535:767case8538:768case8654:769case8691:770 strPinyin="FU";771break;772case6246:773case7056:774case7057:775case7424:776case7837:777 strPinyin=" GA"; 778break;779case5604:780case5875:781case5982:782case7414:783case7464:784 strPinyin="GAI"; 785break;786case5965:787case6053:788case6247:789case6306:790case6779:791case6838:792case6887:793case7104:794case7347:795case7426:796case7723:797case8065:798case8491:799 strPinyin="GAN"; 800break;801case7716:802case7824:803case8364:804 strPinyin="GANG"; 805break;806case5626:807case5830:808case5912:809case6227:810case7141:811case7332:812case7334:813case7429:814case7915:815 strPinyin="GAO"; 816break;817case5610:818case5678:819case5933:820case5957:821case6010:822case6435:823case7092:824case7501:825case7585:826case7749:827case7951:828case8143:829case8220:830case8420:831case8732:832 strPinyin="GE";833break;834 strPinyin="GEI"; 835break;836case5608:837case6102:838case6371:839case8462:840 strPinyin="GEN"; 841break;842case6376:843case6657:844case7114:845case8665:846 strPinyin="GENG"; 847break;848case7178:849case7537:850case8228:851case8601:852 strPinyin="GONG"; 853break;854case5694:855case5824:856case6524:865case8724:866 strPinyin="GOU"; 867break;868case5637:869case5812:870case6152:871case6536:872case6773:873case7284:874case7379:875case7484:876case7486:877case7591:878case7617:879case7813:880case7825:881case7860:882case7932:883case8019:884case8083:885case8233:886case8494:887case8593:888case8681:889case8729:890 strPinyin="GU";891break;892case5652:893case5820:894case6341:895case7273:896case7550:897case8027:898 strPinyin="GUA";899break;900 strPinyin="GUAI"; 901break;902case5736:903case6124:904case6272:905case6842:906case7834:907case8057:908case8170:909case8704:910 strPinyin="GUAN"; 911break;912case6359:913case6578:914case7270:915case7555:916 strPinyin="GUANG"; 917break;918case5648:919case5659:920case6649:921case7003:922case7277:923case7433:924case7448:925case8007:926case8394:927case8657:928case8712:929 strPinyin="GUI";930break;931case5782:932case7121:933case7762:934case8671:935 strPinyin="GUN";936break;937case5769:938case6266:939case6335:940case6494:941case6538:942case6603:943case7304:944case7529:945case8188:946case8268:947case8269:948 strPinyin="GUO"; 949break;950case7894:951 strPinyin="HA";952break;953case6443:954case7560:955case8516:956 strPinyin="HAI";957break;958case5885:959case6153:960case6294:961case6759:962case6911:963case7447:964case7642:965case8192:966case8205:967case8232:968case8793:969 strPinyin="HAN";974 strPinyin="HANG"; 975break;976case6179:977case6222:978case6438:979case6467:980case6909:981case6916:982case7427:983case8009:984case8211:985case8226:986 strPinyin="HAO"; 987break;988case5813:989case5932:990case5954:991case6432:992case6756:993case7434:994case7833:995case8202:996case8234:997case8471:998 strPinyin="HE";999break;1000 strPinyin="HEI"; 1001break;1002 strPinyin="HEN"; 1003break;1004case6231:1005case7181:1006case7276:1007 strPinyin="HENG"; 1008break;1009case5768:1010case5774:1011case5807:1012case6106:1013case6214:1014case6216:1015case6740:1016case6792:1017 strPinyin="HONG"; 1018break;1019case6009:1020case6565:1021case6943:1022case8090:1023case8383:1024case8455:1025case8655:1026case8731:1027 strPinyin="HOU"; 1028break;1029case5792:1030case6392:1031case6481:1032case6518:1033case6609:1034case6679:1035case6717:1036case6816:1037case6879:1038case7190:1039case7346:1040case7385:1041case7618:1042case7635:1043case7646:1044case7670:1045case7672:1046case7679:1047case8013:1048case8032:1049case8041:1050case8055:1051case8343:1052case8513:1053case8590:1054 strPinyin="HU"; 1055break;1056case7072:1057case7275:1058case7725:1059case7892:1060 strPinyin="HUA"; 1061break;1062case8555:1063 strPinyin="HUAI"; 1064break;1065case5928:1066case6140:1067case6307:1068case6487:1069case6621:1070case6801:1071case6829:1072case6881:1073case6930:1074case6953:1075case7157:1076case7944:1077case8673:1078case8763:1079 strPinyin="HUAN"; 1080break;1081case5882:1082case6569:1091case8692:1092 strPinyin="HUANG"; 1093break;1094case5822:1095case6078:1096case6086:1097case6205:1098case6352:1099case6360:1100case6425:1101case6736:1102case6807:1103case6811:1104case6971:1105case7132:1106case7185:1107case7445:1108case7703:1109case8219:1110case8319:1111case8766:1112 strPinyin="HUI"; 1113break;1114case5827:1115case6638:1116case6752:1117case6867:1118 strPinyin="HUN"; 1119break;1120case5669:1121case6229:1122case6311:1123case6475:1124case6623:1125case7856:1126case7933:1127case7976:1128case8175:1129case8322:1130 strPinyin="HUO"; 1131break;1132case5629:1133case5632:1134case5662:1135case5705:1136case5742:1137case5952:1138case6024:1139case6033:1140case6193:1141case6210:1142case6265:1143case6320:1144case6350:1145case6383:1146case6507:1147case6553:1148case6809:1149case6976:1150case7087:1151case7160:1152case7165:1153case7314:1154case7374:1155case7410:1156case7411:1157case7469:1158case7473:1159case7487:1160case7620:1161case7722:1162case7831:1163case7990:1164case8002:1165case8104:1166case8217:1167case8337:1168case8339:1169case8463:1170case8550:1171case8611:1172case8661:1173case8674:1174case8757:1175case8768:1176 strPinyin="JI"; 1177break;1178case5704:1179case5903:1180case6171:1181case6521:1182case6804:1183case6940:1184case7176:1185case7409:1186case7546:1187case7702:1188case7882:1189case7956:1190case8072:1191case8142:1192case8244:1193case8353:1194case8434:1195case8542:1204case6853:1205case6931:1206case6932:1207case7144:1208case7237:1209case7305:1210case7407:1211case7415:1212case7480:1213case7489:1214case7506:1215case7576:1216case7790:1217case7921:1218case8047:1219case8148:1220case8340:1221case8469:1222case8534:1223case8561:1224case8668:1225case8721:1226 strPinyin="JIAN"; 1227break;1228case6092:1229case6814:1230case7113:1231case7154:1232case7481:1233case7768:1234case8180:1235case8461:1236case8488:1237 strPinyin="JIANG"; 1238break;1239case5714:1240case5753:1241case6020:1242case6090:1243case6256:1244case6461:1245case6572:1246case7015:1247case7524:1248case8008:1249case8052:1250case8252:1251case8520:1252case8551:1253case8662:1254 strPinyin="JIAO"; 1255break;1256case5806:1257case5821:1258case6255:1259case6414:1260case7028:1261case7061:1262case7278:1263case7757:1264case8060:1265case8201:1266case8227:1267case8441:1268case8658:1269case8726:1270 strPinyin="JIE"; 1271break;1272case5865:1273case6103:1274case6132:1275case6468:1276case6643:1277case6659:1278case7138:1279case7210:1280case7340:1281case7465:1282case7478:1283case8138:1284 strPinyin="JIN"; 1285break;1286case5751:1287case5869:1288case6128:1289case6616:1290case6729:1291case6794:1292case6941:1293case6982:1294case7026:1295case7534:1296case7554:1297case7570:1298case7626:1299 strPinyin="JIANG"; 1300break;1301case6936:1302case7671:1303 strPinyin="JIONG"; 1304break;1305case5754:1306case6417:1307case6746:1308case7249:1314 strPinyin="JIU"; 1315break;1316case5738:1317case5810:1318case6036:1319case6058:1320case6076:1321case6268:1322case6965:1323case6980:1324case7202:1325case7307:1326case7316:1327case7323:1328case7357:1329case7381:1330case7488:1331case7611:1332case7850:1333case7924:1334case8022:1335case8132:1336case8153:1337case8482:1338case8522:1339case8565:1340case8620:1341case8634:1342case8722:1343 strPinyin="JU"; 1344break;1345case5918:1346case6590:1347case6824:1348case7280:1349case7835:1350case7935:1351case7952:1352case8633:1353 strPinyin="JUAN"; 1354break;1355case5642:1356case5667:1357case5860:1358case5939:1359case6207:1360case6421:1361case6457:1362case6469:1363case6540:1364case6617:1365case7062:1366case7169:1367case7286:1368case7351:1369case7663:1370case7967:1371case8574:1372case8591:1373 strPinyin="JUE"; 1374break;1375case6260:1376case8168:1377case8362:1378case8769:1379 strPinyin="JUN"; 1380break;1381case5671:1382case6339:1383case7544:1384 strPinyin="KA"; 1385break;1386case5660:1387case5978:1388case6160:1389case6673:1390case6693:1391case7888:1392case7920:1393case7939:1394 strPinyin="KAI"; 1395break;1396case5709:1397case6108:1398case7412:1399case7772:1400case7811:1401 strPinyin="KAN"; 1402break;1403case5688:1404case6742:1405case7854:1406 strPinyin="KANG"; 1407break;1408case6974:1409case7264:1410case7491:1411case7877:1412 strPinyin="KAO"; 1413break;1414case6430:1415case6519:1416case6701:1417case6859:1418case7076:1419case7128:1420case7170:1421case7380:1430case8282:1431case8733:1432 strPinyin="KE"; 1433break;1434case8144:1435 strPinyin="KEN"; 1436break;1437case7912:1438 strPinyin="KENG"; 1439break;1440case5737:1441case6539:1442case8377:1443 strPinyin="KONG"; 1444break;1445case6050:1446case6202:1447case6321:1448case7778:1449case8356:1450 strPinyin="KOU"; 1451break;1452case5658:1453case6005:1454case6423:1455case7111:1456case8728:1457 strPinyin="KU"; 1458break;1459case5708:1460 strPinyin="KUA"; 1461break;1462case5665:1463case5906:1464case6364:1465case6586:1466case7558:1467 strPinyin="KUAI"; 1468break;1469case8737:1470 strPinyin="KUAN"; 1471break;1472case5818:1473case5831:1474case5887:1475case5959:1476case6237:1477case6349:1478case7094:1479case7460:1480 strPinyin="KUANG"; 1481break;1482case5624:1483case5649:1484case5771:1485case6162:1486case6281:1487case6413:1488case6416:1489case6720:1490case6951:1491case7450:1492case7805:1493case8606:1494case8743:1495 strPinyin="KUI"; 1496break;1497case6204:1498case6245:1499case6458:1500case6618:1501case6928:1502case7152:1503case7841:1504case8051:1505 strPinyin="LIAO"; 1506break;1507case5793:1508case5988:1509case6270:1510case6354:1511case6803:1512case8483:1513case8581:1514case8764:1515 strPinyin="LIE"; 1516break;1517case6194:1518case6388:1519case6555:1520case6662:1521case6733:1522case6964:1523case7361:1524case7405:1525case7602:1526case7812:1527case8452:1528case8579:1529case8775:1530 strPinyin="LIN"; 1531break;1532case5925:1533case6063:1534case6342:1543case8465:1544case8676:1545 strPinyin="LING"; 1546break;1547case6815:1548case6962:1549case7082:1550case7124:1551case7628:1552case7654:1553case7919:1554case7954:1555case8050:1556case8644:1557 strPinyin="LIU"; 1558break;1559case5966:1560case6055:1561case6781:1562case7171:1563case7248:1564case7542:1565case7735:1566case8110:1567 strPinyin="LONG"; 1568break;1569case5745:1570case6168:1571case6422:1572case6548:1573case7946:1574case8092:1575case8179:1576case8287:1577case8735:1578 strPinyin="LOU"; 1579break;1580case6744:1581case7321:1582case7586:1583case7918:1584case7989:1585case8158:1586 strPinyin="Lü"; 1587break;1588case5968:1589case6303:1590case6464:1591case6782:1592case6843:1593case6885:1594case6954:1595case7220:1596case7251:1597case7354:1598case7391:1599case7404:1600case7510:1601case7545:1602case7969:1603case8021:1604case8056:1605case8392:1606case8421:1607case8652:1608 strPinyin="LU"; 1609break;1610case5785:1611case7014:1612case7279:1613case8029:1614case8639:1615 strPinyin="LUAN"; 1616break;1617 strPinyin="LǖE"; 1618break;1619 strPinyin="LUN"; 1620break;1621case5732:1622case5789:1623case6093:1624case6259:1625case6291:1626case6604:1627case6788:1628case6880:1629case7183:1630case7301:1631case7565:1632case7961:1633case8107:1634case8635:1635 strPinyin="LUO"; 1636break;1637case6328:1638 strPinyin="M"; 1639break;1640case6373:1641case6579:1642case7054:1643case7231:1644case8301:1645 strPinyin="MA"; 1646break;1647case5929:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本c程序经过了Proteus仿真成功,硬件可能要修改,附电路图
#include <reg52.h>
#include<ABSACC.H>
#include<max7221.h>
#define a8155_CON XBYTE[0xf200] /*控制字地址*/
#define a8155_PA XBYTE[0xf201] /*PA口地址*/
#define a8155_PB XBYTE[0xf202] /*PB口地址*/
#define a8155_PC XBYTE[0xf203] /*PC口地址*/
#define uchar unsigned char
#define uint unsigned int
uchar temp1,temp2,temp,b;
void delayms(uchar ms)
{
uchar x;
for(;ms>0;ms--)
{
for(x=125;x>0;x--);
}
}
uchar code disp[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar code key_code[] =
{
//键编码数组
0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb,
0xb7, 0x7e, 0x7d, 0x7b, 0x77
}; //不同的按键规律需要重新的调整。
void diplay()
{
}
void main()
{
uchar j;
init7221();
while(1)
{
//wraddr(2,2);
a8155_CON=0x03;//a出
a8155_PA=0xf0; //hang
a8155_PB=0x00; //lie
a8155_CON=0x02;//a入
temp1=a8155_PA;
temp1=temp1&0xf0;
if(temp1!=0xf0)
{
delayms(5);
temp1=a8155_PA;
temp1=temp1&0xf0;
if(temp1!=0xf0)
{
a8155_CON=0x03;//a出
a8155_PA=0x00; //hang
a8155_PB=0x0f; //lie
a8155_CON=0x01;
temp2=a8155_PB;
temp2=temp2&0x0f;
temp1=temp1&0xf0;
temp=temp1+temp2;
}
}
//P1=disp[2];
for (j = 0; j < 16; j++)
{
if (temp == key_code[j])
//查表得键值
{
P1=disp[j];
wraddr(1,j); //返回有效键值
}
}
}
}
Max7221数码管驱动h文件
#ifndef __MAX7221_H__
#define __MAX7221_H__
#define uchar unsigned char
#define uint unsigned int
sbit DIN = P3^0;
sbit SCL = P3^2;
sbit CS = P3^1;
void delayus(uchar us)
{
while(us--);
}
void wr7221(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DIN=(bit)(dat&0x80);
SCL=0;
delayus(2);
SCL=1;
delayus(2);
dat=dat<<1;
}
}
void wraddr(uchar addr,uchar dat) {
CS=0;
wr7221(addr);
wr7221(dat);
CS=1;
}
void init7221(void)
{
wraddr(0x0a,0x04);
wraddr(0x0b,0x07);
wraddr(0x0c,0x01);
wraddr(0x0f,0x00);
wraddr(0x09,0x0ff);
}
#endif
仿真电路图。