数码管动态显示数码管动态显示
#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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。