导航:首页 > 操作系统 > 单片机tempdata怎么用

单片机tempdata怎么用

发布时间:2023-01-20 02:41:21

A. 51单片机数码管右移程序的理解问题

while(1)
{
j++;
if(j==20) //用于移动完成后显示一段时间,这个程序上电时不会立即显示对吧
{
j=0;
if(0==k) //K == 0时,以下程序表示在数据全部移出显示的时候,对数码做清零操作,以便数字能够从左边开始向右移动
{
for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
TempData[s]=0x00;
}
TempData[7-i]=DuanMa[k]; //把需要显示的字符依次送缓冲区// 第一次 出来一个0,后面类推
TempData[8-i]=0x00; //不需要显示的区域清零//由于上条语句给TempData[7]给了0的断码,那么下次来的时候就要清掉,以保证只有一个数字移动。
i++;
if(i==(8-k)) //这里的不用解释了吧,8个数码管
{
i=0;
k++;
if(k==8)
k=0;
}

}
Display(0,8);//从第一位显示,共显示8位
}

B. 请教51单片机定时中断检测长按与短按问题-100分悬赏

首先你的程序写的不够合理,作为按键一般会使用外部中断而不是定时中断,外部中断可以保证实时按键。
一般按键都是采用外部中断,如果是在while循环里面进行按键键值判断,那么在判断之前最好加个小延时,进行按键去抖。
像你这个wile循环耗时很长,最适合使用外部中断了,当然如果按键没有接到外部中断引脚,采用定时中断也可以达到一定的效果,但是一定要把定时时间设置的短一些。

C. 问下·TX-51单片机中数码管显示如何移位,比如说我按键1在第6个根数码管上显示1。

其实不存在移位问题,只是一个数的显示而已,按键1该数为1,铵键2该数为11……然后即时将该项数在数码管中显示。给你一个函数,作用时将一个数在第几个数码管中显示。
void display(uchar firstbit,uchar Num) //firstbit为要第一位显示数码管,NUM是要显示数的位数
{
uchar s;
for(s=0;s<Num;s++)
{
P0=0xff;
an=1;
an=0;
P0=table2[s+firstbit];
wei=1;
wei=0;
P0=tempdata[s];
an=1;
an=0;
delay(1);
}
}

D. 求单片机大神 写10s的秒表程序,用三个按键分别控制秒表启动、停止、清零(要求:使用定时器0定时,

/*-----------------------------------------------
数码管显示,按键控制秒表
中断按键控制,数码管显示,中断0控制计时和停止,中断1清零
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

unsigned int second;//定义全局变量
bit GoFlag;//定义停止,计时标志

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;// 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0~9
unsigned char codedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量

void DelayUs2x(unsigned char t);//函数声明
void DelayMs(unsigned char t);
void Display(unsigned char FirstBit,unsigned char Num);
void Init_Timer0(void);
void CLR(void);
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned char num=0;

EX0=1; //外部中断0开
IT0=1; //IT1=0表示边沿触发
EX1=1; //外部中断1开
IT1=1; //IT1=1表示边沿触发
Init_Timer0();
while (1) //主循环
{

TempData[0]=dofly_DuanMa[second/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=dofly_DuanMa[second%10];
//主循环中添加其他需要一直工作的程序

}
}

/*------------------------------------------------
显示函数,用于动态扫描数码管
输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
如输入0表示从第一个显示。
Num表示需要显示的位数,如需要显示99两位数值则该值输入2
------------------------------------------------*/
void Display(unsigned char FirstBit,unsigned char Num)
{
static unsigned char i=0;

DataPort=0; //清空数据,防止有交替重影
LATCH1=1; //段锁存
LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码
LATCH2=1; //位锁存
LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;

i++;
if(i==Num)
i=0;

}
/*------------------------------------------------
定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
/*------------------------------------------------
定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
static unsigned char num;
TH0=(65536-20000)/256; //重新赋值 20ms
TL0=(65536-20000)%256;

Display(0,8);
if(GoFlag)
{
num++;
if(num==5)
second++;//秒加1
if(second==10)
second=0;
}
}
/*------------------------------------------------
外部中断0程序
------------------------------------------------*/
void ISR_INT0(void) interrupt 0
{
GoFlag=!GoFlag; //利用外部中断打开和关闭定时标志 用于开始和停止计时
}
/*------------------------------------------------
外部中断1程序
------------------------------------------------*/
void ISR_INT1(void) interrupt 2
{
if(GoFlag==0)//停止时才可以清零
CLR();
}/*------------------------------------------------
数值清零
------------------------------------------------*/
void CLR(void)
{
second=0; //利用外部中断清零
msecond=0;
}

E. 关于单片机程序电子密码器的问题

单片机中变量初值一般为0,最好在定义变量时,就给变量赋初值是最好的

F. 两位秒表 51单片机程序编程

你好:

三个警告应该是void int_initial()与void timer0_initial()前边不用加void,然后就是Display()这个函数没有用。

其次我想说,TMOD=0x01就行了,因为程序里边只用到了定时器0,其他的状态不管,甚至可以说把其他定时器关掉。,也用不着TMOD&=0xfd。
然后中断函数要尽量精简、短小实干、不宜过长,因为中断本身就打扰了main函数的正常运行,而且中断内容太多反而容易在下次中断到来时还没处理完,就会栈溢出。养成好的习惯,中断就对最基本的时间计次就行,其余的都抛给main函数吧。
EA、ET0尽量就和定时器0一起初始化,你这习惯看着别扭。可读性略低。
中断里不要声明变量,你用个全局变量就OK。
希望我的回答能帮助到你。

G. 关于单片机声光报警器程序谁给解释一下。求高手,求高人。

触发,报警。定时器1

H. 单片机告诉一个地址,怎样用C语言编程读取地址处的值

4X4键盘还有物理地址?
你是怎么得到这个物理地址的呢?
-待续-

I. 单片机4*4矩阵键盘扫描 问题

LZ 应该把tempdata=P1; 写在 while(1) 里面,而不是写在前面。
另外,如果松手了,P0 的灯怎么办?还是全亮不变?那效果就是你只能按一次,后面按的都没反应。
搞错,为什么 P1又是 按键 又是 LED灯呢?你是什么硬件连接啊?

J. c/c++ 单片机 硬件 驱动

这里的printf你知道51系列是怎么样实现的,先不管这个函数里面的实现,首先我要告诉你调试串口的时候不要依赖于printf函数,原因是单片机中printf是通过串口去实现的跟PC上直接调用printf是有很大区别的,你这样去调试就有问题了,通过printf函数会通过某个串口发送一串指令出去,对于你接收端的程序就有影响,而且还要依赖于printf函数里面具体的实现,在单片机调试串口数据并需要打印的时候,很少这样去做。你这里就是想看tempData 的值,好的办法是,这里直接使用串口SendCharToUsart( tempData);把这个值发给电脑在电脑上显示出这个值。

阅读全文

与单片机tempdata怎么用相关的资料

热点内容
android获取窗口大小 浏览:178
程序员为世界带来的贡献 浏览:214
程序员招聘自荐信 浏览:693
魔兽键位设置命令宏 浏览:645
程序员没有目标了 浏览:828
抢答器c程序编程 浏览:703
什么app可以自己玩 浏览:76
刨客app是什么 浏览:963
cad输入命令栏不见了 浏览:834
做故事集可以用什么app 浏览:692
qq邮箱发送压缩包 浏览:672
程序员桌面机器人 浏览:589
xjr快速开发平台源码 浏览:159
java接口runnable 浏览:31
python怎么运行web服务器 浏览:349
notepad编程代码 浏览:740
什么安卓的毛病最少 浏览:611
hp的pjl设备访问命令 浏览:635
googlewebp图片压缩技术 浏览:215
tbc萨满加血宏命令 浏览:757