首页 数码管动态显示

数码管动态显示

举报
开通vip

数码管动态显示数码管动态显示 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t unsigned char tab []={0xc0,0xf9,0xa4,0xb...

数码管动态显示
数码管动态显示 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //主程序 void main() { uchar i,wei=0x01; while(1) { for(i=0;i<8;i++) { P2=0xff; //关闭显示 wei=_cror_(wei,1); P0=DSY_CODE[i]; //发送数字段码 P2=wei; //发送位码 DelayMS(300); } } } 键盘 # include unsigned char tab []={0xc0,0xf9,0xa4,0xb0,}; //共阳数码管段码 sbit s0=P3^0; sbit s1=P3^1; sbit s2=P3^2; sbit s3=P3^3; unsigned char temp; unsigned char lin; unsigned char row; void delay() { //去抖动 int i,j; for (i=0;i<10;i++) { for (j=0;j<100;j++) {} } } void linscan () { P3=0xfc; if (s0==1) { delay() ; if (s0==1) lin=0; } if (s1==1) { delay() ; if (s1==1) lin=1; } void rowscan () { P3=0xf3; if (s2==1) { delay() ; if (s2==1) row=0; } if (s3==1) { delay() ; if (s3==1) row=1; } void main () { while (1) { linscan (); rowscan (); temp=lin*2+row; P0=tab [temp]; } } 通讯2400B/S #include void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xF4; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } void SendOneByte(unsigned char c)//发送函数 { SBUF = c; while(!TI); TI = 0; } void main(void) { InitUART(); } void UARTInterrupt(void) interrupt 4 //接收中断 { if(RI) { RI = 0; //接收的程序放在这里 } else TI = 0; } 已知89C51单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs, 低电平宽300μs。 解:T0采用模式2作为50μs定时时的初值: 所以 作300μs定时时的初值: 所以 MOV TMOD,#02H ;设置定时器T0工作于模式2 L2:CLR P1.0 ;P1.0输出低电平 MOV TH0,#6AH ;置入定时300μs初值 MOV TL0,#6AH SETB TR0 ;启动T0 LOOP1:JBC TF0,L1 ;查询300μs时间到,时间到,转L1 SJMP LOOP1 ;时间未到,转LOOP1,继续查询 L1:SETB P1.0 ;P1.0输出高电平 CLR TR0 ;关闭T0 MOV TH0,#0E7H ;置入定时300μs初值 MOV TL0,# 0E7H SETB TR0 ; 启动T0 LOOP2:JBC TF0,L2 ;查询50μs时间到,时间到,转L2 SJMP LOOP2 ;时间未到,转LOOP2,继续查询 14、已知89C51单片机的fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周 期为 2ms和500μs的方波。 解:采用模式0作 定时初值: 所以 MOV R2,#04H ;R2为“250μs”计数器,置入初值4 CLR P1.0 ;P1.0输出低电平 CLR P1.1 ;P1.1输出低电平 MOV TMOD,#00H L2:MOV TH1,#0F8H ;置入定时250μs初值 MOV TL1,#06H SETB TR1 ;启动T1 LOOP:JBC TF1,L1 ;查询250μs时间到,时间到,转L1 SJMP LOOP ;时间未到,转LOOP,继续查询 L1:CPL P1.1 ;P1.1输出取反,形成周期为500μs CLR TR1 ;关闭T1 DJNZ R2,L2 ;“250μs”计数器减1,到1ms吗,未到转L2 CPL P1.0 ;P1.0输出取反,形成周期为2ms方波 MOV R2,#04H ;重置“250μs”计数器初值4 LJMP L2 ;重复循环 18、 设fosc=12MHz。试编制一段程序,功能为:对定时器T0初始化,使之工作在模式2, 产生200μs定时,并用查询T0溢出标志的方法,控制 P1.0输出周期为2ms的方波。 解:T0作定时器时初值: 所以 程序1: CLR P1.0 ;P1.0输出低电平 MOV R2,#05H ;R2为“200μs”计数器,置入初值5,计1ms MOV TMOD,#02H ;设定时器T0工作于模式2 L2:MOV TH0,#38H ;置入定时初值 MOV TL0,#38H SETB TR0 ;启动T0 LOOP:JBC TF0,L1 ;查询200μs时间到,时间到,转L1 SJMP LOOP ;时间未到,转LOOP,继续查询 L1:CLR TR0 ;关闭T0 DJNZ R2,L2 ;“200μs”计数器减1,到1ms吗,未到,转L2 CPL P1.0 ;到1ms,P1.0取反,形成周期为2ms的方波 MOV R2,#05H ;重置“200μs”计数器初值 LJMP L2 ;重复循环 程序2: MAIN:MOV TMOD,#02H ;设定时器T0工作于模式2 CLR P1.0 ;P1.0输出低电平 LOOP1:MOV R2,#05H ;R2为“200μs”计数器,置入初值5,计1ms LOOP:MOV TH0,#38H ;置入定时初值 MOV TL0,#38H SETB TR0 ;启动T0 JNB TF0,$ ;查询200μs时间到,时间到,继续查询 CLR TR0 ;关闭T0 DJNZ R2,LOOP ;“200μs”计数器减1,到1ms吗,未到,转LOOP CPL P1.0 ;到1ms,P1.0取反,形成周期为2ms的方波 SJMP LOOP1 ;重复循环 7、设fosc,11.059MHz,试编写一段程序,其功能为对串行口初始化,使 之工作与方式1,波特率为1200b/s;并用查询串行口状态的方法,读出接收缓 冲器的数据并回送到发送缓冲器。 解: START:MOV SCON,#40H ;串行接口工作于方式1 MOV TMOD,#20H ;定时器T1工作于模式2 MOV TH1,#0E8H ;赋定时器计数初值 MOV TL1,#0E8H SETB TR1 ;启动定时器T1 MOV A,SBUF ;读出接收缓冲器数据 MOV SBUF,A ;启动发送过程 JNB TI,$ ;等待发送完 CLR TI ;清TI标志 SJMP $ ;结束
本文档为【数码管动态显示】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_871676
暂无简介~
格式:doc
大小:21KB
软件:Word
页数:8
分类:生产制造
上传时间:2017-10-15
浏览量:34