导航:首页 > 操作系统 > 单片机smgduan

单片机smgduan

发布时间:2022-09-26 03:19:07

‘壹’ 51单片机定时器T1中断使数码管计数0—F,每秒加1,想要将if()函数写到main()函数中,如何实现。

把初始化程序 Timer1Init(); 放在while(1) 的上面,你现在这样,每次循环都初始化了,就永远也不计数了 。另外,开机是显示8,是因为,开机P0口全为1,要过1秒后开始从0开始显示,可以在while(1)上面加一行 P0=0x3f; 这样,开机就显示0了。另外,这种定时1秒,定时器最好定时长点,如50ms ,你现在是定时1ms ,这中断频率太高了,如果有其它程序就会影响主程序的执行。
还有,if 语句下面的
if(i==1000)
{
//TR1=0;//要这行,就计数一遍就停了,要不停地计数就要删掉
i=0;
P0=smgan[n++];
if(n==16) n=0;

}

‘贰’ 单片机编程错误

#include"reg52.h"
typedefunsignedcharu8;
typedefunsignedintu16;

sbitLSA=P2^2;
sbitLSB=P2^3;
sbitLSC=P2^4;

sfrGPIO_KEY=0x90;
sfrGPIO_DIG=0x80;

u16KeyValue;

u8codesmgan[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

voiddelay(u16i)
{
while(i--);
}

voidKeyDown()
{
u8a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0x0f;
switch(GPIO_KEY)
{
case(0x07):KeyValue=0;break;
case(0x0b):KeyValue=1;break;
case(0x0d):KeyValue=2;break;
case(0x0e):KeyValue=3;break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0x70):KeyValue=KeyValue;break;
case(0xb0):KeyValue=KeyValue+4;break;
case(0xd0):KeyValue=KeyValue+8;break;
case(0xe0):KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0))
{
delay(1000);
a++;
}
}
}
}
voidmain()
{
LSA=0;
LSB=0;
LSC=0;
while(1)
{
KeyDown();
GPIO_DIG=smgan[KeyValue];
}
}

‘叁’ 如何用单片机做一个简单的倒计时器

我已经完成了,下面是电路图和实际效果,你也试试,程序已经调试完成了!!!是使用秒表程序改编完成的,喜欢的话,点一个赞吧!希望能帮到你!!!

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16; //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};//显示0~F的值

u8 ssec=100,sec=60,min=04;

u8 DisplayData[8];

sbit beep=P1^5;

unsigned long counter=0;

unsigned int c=0;

sbit p15=P1^5;

bit p;

/*******************************************************************************

* 函 数 名 : delay

* 函数功能 : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}

/*******************************************************************************

* 函 数 名 : Timer0Init

* 函数功能 : 定时器0初始化

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void Timer0Init()

{

TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

ET0=1;//打开定时器0中断允许

EA=1;//打开总中断

TR0=1;//打开定时器 -->启动定时器中断!

ET1=1;

TR1=1;

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

}

/*******************************************************************************

* 函 数 名 : DigDisplay

* 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示

*******************************************************************************/

void DigDisplay()

{

u8 i;

for(i=0;i<8;i++)

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

P0=DisplayData[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐-->撤销选中;

}

}

void datapros()

{

DisplayData[0]=smgan[ssec%10];

DisplayData[1]=smgan[ssec/10];

DisplayData[2]=0x40;

DisplayData[3]=smgan[sec%10];

DisplayData[4]=smgan[sec/10];

DisplayData[5]=0x40;

DisplayData[6]=smgan[min%10];

DisplayData[7]=smgan[min/10];

}

/*******************************************************************************

* 函 数 名 : main

* 函数功能 : 主函数

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void main()

{

Timer0Init(); //定时器0初始化

while(1)

{

datapros();

DigDisplay();

}

}

/*******************************************************************************

* 函 数 名 : void Timer0() interrupt 1

* 函数功能 : 定时器0中断函数

* 输 入 : 无

* 输 出 : 无

*******************************************************************************/

void Timer0() interrupt 1

{

TH0=0Xd8; //给定时器赋初值,定时10ms

TL0=0Xf0;

ssec--;

if(ssec==00) //1s

{

ssec=100;

sec--;

if(sec==00)

{

sec=60;

min--;

if(min==-1)

{

P1=1;

ssec=0;sec=0;min=0;

TR0=0;

}

}

}

}

void Timer1() interrupt 3

{

TH1=(65536-250)/256; //FC

TL1=(65536-250)%256;

if(p!=1) p15=~p15;

if(p==1) p15=0;

c++;

if(c==250)

{

//c=0;

p=~p;

}

if(c>=250&&1695);

if(c==1696) c=0;

}

‘肆’ 单片机p0=~smgan[0]是什么意思

应该是大写的字母,P0=~smgan[0]。这是从P0口输出数字0的段码,smgan[ i ],是程序前定义过的段码表。但是,原理图中或仿真图中的数码管类型与段码表不符,两者正相反。例如,数码管是共阳的,而段码表是共阴的,所以,从P0口输出段码之前要先取反,~ 符号是8位数都取反的意思。请及时采纳。

‘伍’ 单片机编程里的smgan lednum password keycode 一般定义什么

汇编语言和keil c语言!keil c实际上就是c语言,只不过里面有些特殊定义,区别很小的,如果你c好的话建议你直接学keilc,汇编编起来比较复杂,代码多,但是他也有c不具备的优势,就是可以自己定义空间,把每个单元都用到极致,这点很重要尤其是你的系统比较大,内存比较紧张的时候就不能让系统自动分配地址。但是不论哪种语言你都要对硬件有所了解,了解内部结构及工作流程,

‘陆’ 单片机延时函数

因为第二个延时时间太长导致数码管刷新频率太低

‘柒’ 51单片机开发模板制作温度显示按键控速风扇,程序编好,按键功能实现不了,求大神门帮忙看看,感谢,感谢

首先你这程序有问题,这四行不属于任何的子程序,编译都出错。
DisplayData[1] = smgan[temp / 10000];
DisplayData[2] = smgan[temp % 10000 / 1000];
DisplayData[3] = smgan[temp % 1000 / 100] | 0x80;
DisplayData[4] = smgan[temp % 100 / 10];DisplayData[5] = smgan[temp % 10];
把这四行改正后,编译后仿真运行程序,3个按键是起作用的。你感觉不起作用,是因为那3个按键,就是改变 flag 分别为0,1,2。可是,主程序中根据 flag 值不同,执行的却是同一个动作,都是 moto=1; (稍稍有一点区别,只是你感觉不出来)所以,按什么键都是这个动作,按不按都 一样,当然那就会觉得按键不起作用。那3个按键控制的动作要有区别呀,或者动作区别要大,才能看出来按键起作用啦。最简单,直接的方法是,按住按键不松手,看数码管是不是全灭啦,如果全灭了,说明按键就是起作用的。

‘捌’ 单片机编程的问题。C141错误

smgan[15]。。你定义数组说有15个元素,而你[ ]内填写的却是16个元素,这样必然是不对的。
smgan[15]中这15是指数组有多少的元素,并非是实际数组从smgan[0]、smgan[1]开始的那个元素标识值。。
u8 code smgan[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};
如果需要全部元素应该写成:
u8 code smgan[16]=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};
另外,数组定义数值可以前面不填写成默认。u8 code smgan[]={n,n+1,n+2..}(定义时候后面要用花括号)
仔细看c语言基础书本上的例句,然后再编写。。学习就是从简单的会了,然后再逐渐扩展到难的,也就是不感觉多难了。。急于求成会挫伤自身自信和学习兴趣的,真正智者所不取。

阅读全文

与单片机smgduan相关的资料

热点内容
找漫画看应该下载什么app 浏览:182
如何在vps上搭建自己的代理服务器 浏览:744
nginxphp端口 浏览:403
内脏pdf 浏览:152
怎么看云服务器架构 浏览:85
我的世界国际服为什么登不进服务器 浏览:996
微盟程序员老婆 浏览:930
intellij创建java 浏览:110
java连接odbc 浏览:38
启动修复无法修复电脑命令提示符 浏览:359
手机编程是什么 浏览:98
山东移动程序员 浏览:163
苏州java程序员培训学校 浏览:479
单片机液晶驱动 浏览:855
魔拆app里能拆到什么 浏览:132
新预算法的立法理念 浏览:144
wdcpphp的路径 浏览:135
单片机p0口电阻 浏览:926
浏览器中调短信文件夹 浏览:594
五菱宏光空调压缩机 浏览:70