我给你一个数码管代码_第1页
我给你一个数码管代码_第2页
我给你一个数码管代码_第3页
我给你一个数码管代码_第4页
我给你一个数码管代码_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、我给你一个数码管代码,自己修改: /* * 标题: 伟纳电子ME300B单片机开发系统演示程序 - LED数码管显示1-8 * * 文件: wl004.C * * 日期: 2004-1-5 * * 版本: 1.0 * * 作者: 伟纳电子 - Freeman * * 邮箱: freeman * * 网站: * * * 描述: * * LED数码管显示演示程序 * * 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 * * * * * * * 【版权】 Copyright(C)伟纳电子 All Rights Reserved * * 【声明】 此程序仅用于学习与参考,引用请注明版权和

2、作者信息! * */ #include <reg51.h> #include <intrins.h> unsigned char data dis_digit; unsigned char code dis_code11=0xc0,0xf9,0xa4,0xb0, / 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff;/ 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf8; unsigned char data dis_index; void main() P0 = 0xff; P

3、2 = 0xff; TMOD = 0x01; TH0 = 0xFC; TL0 = 0x17; IE = 0x82; dis_buf0 = dis_code0x1; dis_buf1 = dis_code0x2; dis_buf2 = dis_code0x3; dis_buf3 = dis_code0x4; dis_buf4 = dis_code0x5; dis_buf5 = dis_code0x6; dis_buf6 = dis_code0x7; dis_buf7 = dis_code0x8; dis_digit = 0xfe; dis_index = 0; TR0 = 1; while(1)

4、; void timer0() interrupt 1 / 定时器0中断服务程序, 用于数码管的动态扫描 / dis_index - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 / dis_digit - 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, / 选通P2.0口数码管 / dis_buf - 显于缓冲区基地址 TH0 = 0xFC; TL0 = 0x17; P2 = 0xff; / 先关闭所有数码管 P0 = dis_bufdis_index; / 显示代码传送到P0口 P2 = dis_digit; / dis_digit = _crol_(dis

5、_digit,1); / 位选通值左移, 下次中断时选通下一位数码管 dis_index+; / dis_index &= 0x07; / 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 ;* ;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - LED数码管显示1-8 * ;* 文件: wl004.asm * ;* 日期: 2004-1-5 * ;* 版本: 1.0 * ;* 作者: 伟纳电子 - Freeman * ;* 邮箱: freeman * ;* 网站: * ;* ;* 描述: * ;* LED数码管显示演示程序 * ;* 在8个LED数码管上依次显示1,

6、2,3,4,5,6,7,8 * ;* * ;* * ;* ;* 【版权】 Copyright(C)伟纳电子 All Rights Reserved * ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! * ;* CODE_SEG SEGMENT CODE DATA_SEG SEGMENT DATA RSEG DATA_SEG dis_digit: DS 1 dis_index: DS 1 dis_buf: DS 8 stack: DS 20 ;= CSEG AT 00000H ; Reset向量 LJMP MAIN CSEG AT 0000BH ; 定时器0中断向量 LJMP

7、 TIMER0 ;= RSEG CODE_SEG MAIN: MOV SP,#(stack-1) ; 初始化堆栈指针 MOV P0,#0FFH ; 初始化I/O口 MOV P2,#0FFH MOV TMOD,#01H ; 初始化timer0 MOV TH0,#0FCH MOV TL0,#017H MOV IE,#082H MOV DPTR, #DIS_CODE ; 设定显示初值 MOV A,#1 MOVC A,A+DPTR MOV dis_buf,A MOV A,#2 MOVC A,A+DPTR MOV dis_buf+01H,A MOV A,#3 MOVC A,A+DPTR MOV dis_

8、buf+02H,A MOV A,#4 MOVC A,A+DPTR MOV dis_buf+03H,A MOV A,#5 MOVC A,A+DPTR MOV dis_buf+04H,A MOV A,#6 MOVC A,A+DPTR MOV dis_buf+05H,A MOV A,#7 MOVC A,A+DPTR MOV dis_buf+06H,A MOV A,#8 MOVC A,A+DPTR MOV dis_buf+07H,A MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描 MOV dis_index,A SETB TR0 ; 启动定时器0,开始动态扫描显示 MAIN_L

9、P: ; 主程序循环,增加其它代码 SJMP MAIN_LP ; END OF main ;= USING 0 TIMER0: ; 定时器0中断服程序, 用于数码管的动态扫描 ; DIS_INDEX - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 ; DIS_DIGIT - 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, ; 选通P2.0口数码管 ; DIS_BUF - 显于缓冲区基地址 PUSH ACC PUSH PSW PUSH AR0 MOV TH0,#0FCH MOV TL0,#017H MOV P2,#0FFH ; 先关闭所有数码管 MOV A,#DIS_BUF ; 获得显示缓冲区基地址 ADD A,DIS_INDEX ; 获得偏移量 MOV R0,A ; R0 = 基地址 + 偏移量 MOV A,R0 ; 获得显示代码 MOV P0,A ; 显示代码传送到P0口 MOV P2,DIS_DIGIT ; MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管 RL A MOV DIS_DIGIT,A INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位 ANL DIS_INDEX,#0x07 ; 当DIS_INDEX等于8(0000 1000)时, 清0 POP AR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论