| 注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 | 
|  | 
| 首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 | 
| 选择分类:当前分类——学单片机   相关联或者相类似的文章:    测电流法(505) 器件的筛选与检测(505) 飞行写真(505) 几款直流升压电路(504) 重复式定时电路(503) 28. 数字电压表(503) 防抖动轻触开关(503) 外星人来的那一天(503) 常用运算放大器(502) 315MHz无线红外探测器(502) 怎样利用音乐改善心理状态?(502) 巧购电子元器件(502) 单片机可编程广播自动播出系统(502) 小小电容之大大观(502) 购物21个月后以诚信为理由要求退款(500) 电子高压灭蝇器电路图解(500) 电子点火器电路图及工作原理分析(500) 蓝牙收发芯片RF2968的原理及应用 (500) 如何DIY 投影机?新手知识讲座!(500) 学电子----电子元件介绍(500) 首页 前页 后页 尾页  本站推荐: | 21.            拉幕式数码显示技术 1.  实验任务  用AT89S51单片机的P0.0/AD0-P0.7/AD7端口接数码管的a-h端,8位数码管的S1-S8通过74LS138译码器的Y0-Y7来控制选通每个数码管的位选端。AT89S51单片机的P1.0-P1.2控制74LS138的A,B,C端子。在8位数码管上从右向左循环显示“12345678”。能够比较平滑地看到拉幕的效果。 2. 电路原理图   图4.21.1 3. 系统板上硬件连线  (1.       把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上; (2.       把“三八译码模块”区域中的Y0-Y7用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.       把“单片机系统”区域中的P1.0-P1.2端口用3根导线连接到“三八译码模块”区域中的A、B、C“端口上; 4. 程序设计方法  (1.       动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示,因此,要显示8位的数据,必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms到4ms之间,所以为了保证正确显示,我必须每隔1ms,就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器T0来控制,每定时1ms对数码管刷新一次,T0采用方式2。 (2.       在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 5. 程序框图  主程序框图 
 
 
 
 
 
 
 
 中断服务程序 
 
 
 
 
 
 
 
 
 
 
 
 
 
   6. 汇编源程序  DISPBUF         EQU 30H  DISPCNT         EQU 38H  DISPBIT         EQU 39H  T1CNTA          EQU 3AH  T1CNTB          EQU 3BH  CNT             EQU 3CH                  ORG 00H                  LJMP START                  ORG 0BH                  LJMP INT_T0  START:          MOV DISPCNT,#8                  MOV A,#10                  MOV R1,#DISPBUF  LP:             MOV @R1,A                  INC R1                  DJNZ DISPCNT,LP                  MOV DISPBIT,#00H                  MOV T1CNTA,#00H                  MOV T1CNTB,#00H                  MOV CNT,#00H                  MOV TMOD,#01H                  MOV TH0,#(65536-1000) / 256                  MOV TL0,#(65536-1000) MOD 256                  SETB TR0                  SETB ET0                  SETB EA                  SJMP $  INT_T0:                  MOV TH0,#(65536-1000) / 256                  MOV TL0,#(65536-1000) MOD 256                  MOV A,DISPBIT                  ADD A,#DISPBUF                  MOV R0,A                  MOV A,@R0                  MOV DPTR,#TABLE                  MOVC A,@A+DPTR                  MOV P0,A                  MOV A,P1                  ANL A,#0F8H                  ADD A,DISPBIT                  MOV P1,A                                 INC DISPBIT                  MOV A,DISPBIT                  CJNE A,#08H,NEXT                  MOV DISPBIT,#00H  NEXT:           INC T1CNTA                  MOV A,T1CNTA                  CJNE A,#50,LL1                  MOV T1CNTA,#00H                  INC T1CNTB                  MOV A,T1CNTB                  CJNE A,#8,LL1                  MOV T1CNTB,#00H                  INC CNT                  MOV A,CNT                  CJNE A,#9,LLX                  MOV CNT,#00H                  MOV A,CNT  LLX:            CJNE A,#01H,NEX1                  MOV 30H,#8  LL1:            LJMP DONE  NEX1:           CJNE A,#02H,NEX2                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX2:           CJNE A,#03H,NEX3                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX3:           CJNE A,#04H,NEX4                  MOV 33H,#8                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX4:           CJNE A,#05H,NEX5                  MOV 34H,#8                  MOV 33H,#8                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX5:           CJNE A,#06H,NEX6                  MOV 35H,#8                  MOV 34H,#8                  MOV 33H,#8                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX6:           CJNE A,#07H,NEX7                  MOV 36H,#8                  MOV 35H,#8                  MOV 34H,#8                  MOV 33H,#8                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX7:           CJNE A,#08H,NEX8                  MOV 37H,#8                  MOV 36H,#8                  MOV 35H,#8                  MOV 34H,#8                  MOV 33H,#8                  MOV 32H,#8                  MOV 31H,#8                  MOV 30H,#8                  LJMP DONE  NEX8:           CJNE A,#00H,DONE                  MOV 37H,#10                  MOV 36H,#10                  MOV 35H,#10                  MOV 34H,#10                  MOV 33H,#10                  MOV 32H,#10                  MOV 31H,#10                  MOV 30H,#10  LL:             LJMP DONE  DONE:           RETI  TABLE:          DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H                  END  7. C语言源程序  #include <AT89X51.H>  unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,                                 0x66,0x6d,0x7d,0x07,                                 0x7f,0x6f,0x77,0x7c,                                 0x39,0x5e,0x79,0x71,0x00};  unsigned char dispbitcode[]={0xf8,0xf9,0xfa,0xfb,                               0xfc,0xfd,0xfe,0xff};  unsigned char dispbuf[8]={16,16,16,16,16,16,16,16};  unsigned char dispbitcnt;  unsigned int t02scnt;  unsigned char t5mscnt;  unsigned char u;  unsigned char i;  void main(void)  {    TMOD=0x02;    TH0=0x06;    TL0=0x06;    TR0=1;    ET0=1;    EA=1;    while(1);  }  void t0(void) interrupt 1 using 0  {    t5mscnt++;    if(t5mscnt==4)      {        t5mscnt=0;        P0=dispcode[dispbuf[dispbitcnt]];        P1=dispbitcode[dispbitcnt];        dispbitcnt++;        if(dispbitcnt==8)          {            dispbitcnt=0;          }      }    t02scnt++;    if(t02scnt==1600)      {        t02scnt=0;        u++;        if(u==9)          {            u=0;          }        for(i=0;i<8;i++)          {            dispbuf[i]=16;          }        for(i=0;i<u;i++)          {            dispbuf[i]=8;          }      }  }  1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。  2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉! | 
| 本站协议 |
 版权信息 | 
 关于我们 | 
 本站地图 | 
 营业执照 | 
 发票说明 | 
 付款方式 | 
 联系方式 深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389 |