
/数显秒表,范围0~9999/
/源程序默认硬件环境:52单片机,12MHz晶振,4位共阳数码管,P0 口段选,P10~P13 高电平位选(NPN三极管驱动),P13为最高位数码管/
#include"reg52h" //包含52头文件
#define TRUE 1 //定义布尔量'1':真
#define FALSE 0 //定义布尔量'0':假
#define uchar unsigned char //定义 无符号字符型数据 简称
#define uint unsigned int //定义 无符号整型数据 简称
#define th0 0xfc
#define tl0 0x18 //1ms at 12MHz(定时器工作模式1 状态)
#define SEG_Num 4 //数码管位数
#define SEG_Data P0 //数码管段驱动接口
#define SEG_En P1 //数码管位驱动接口
#define SEG_AllOff (SEG_En&=0xf0) //关闭所有数码管(位驱动)
#define DisTimeAt1msCount 4 //单'位'数码管显示时间,数码管刷新频率f=1/(N×t),其中 N为数码管位数, t为单'位'数码管显示时间
#define T1sAt1msCount 1000 //1秒 计数值(在定时器为1ms 情况下计数)
#define TimesEnd 10000 //显示内容范围 0~9999
uchar code SEG_B_List[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管代码表"0-9"
uint Sec;
uchar bdata Flag=1;
sbit DisplayFlag=Flag^0; //显示标志位
sbit TimesUpFlag=Flag^1; //时间更新标志位
void Timer0() interrupt 1 //定时器0中断函数
{
static uchar t1ms; //定义静态变量 t1ms 定时计数寄存空间
static uint t1ms_sec;
TL0=tl0;
TH0=th0; //重赋 1ms 定时初值
t1ms=++t1ms%DisTimeAt1msCount; //先计数值加1,后对计数范围进行限制0~(DisTimeAt1msCount-1)
if(!t1ms) DisplayFlag=TRUE; //若定时计数值归0,则表示计数值曾到达 单'位'显示时间(DisTimeAt1msCount),显示标志 置位
t1ms_sec=++t1ms_sec%T1sAt1msCount; //在 T1sAt1msCount(1000) 范围内加1
if(!t1ms_sec) TimesUpFlag=TRUE; //若 归0,则1s 时间到,时间更新标志位 置位
}
void SystemInit() //系统初始化函数
{
TMOD=0x01; //关闭定时器1,开启定时器0,且工作在模式1(16位定时器)
TH0=th0;
TL0=tl0; //装定时初值(1ms at 12MHz)
TR0=1; //启动计时
ET0=1; //允许定时器0中断
EA=1; //开启系统中断功能
}
float Pow_Self(float x,uint y)//自编简易 x 的 y 次方函数,y只能是 非负整数
{
float sum;
if(x==0 && y==0) return; //0 的 0 次方无意义
else if(x==0) sum=0; //可有可无,y!=0的情况已经包含x=0,不加不影响结果,但影响运算速度
else if(y==0) sum=1; //除上述情况外,任何数的 0 次方均为 1
else if(y==1) sum=x; //任何数的 1 次方 均为 本身
else if(y>1) sum=Pow_Self(x,--y)x; //递归调用,降幂
return sum; //返回计算结果
}
void TimesUpdata() //时间更新 函数
{
if(TimesUpFlag) //若 时间更新标志 为真
{
Sec=++Sec%TimesEnd; //Sec (秒)在 TimesEnd (0~999) 范围内加1
TimesUpFlag=FALSE; //清 时间更新标志位
}
}
void Display(uint dis_num) //显示函数,显示内容为 无符号整型数据 dis_num
{
static uchar dis_loca; //定义静态变量 显示位置
if(DisplayFlag) //若显示标志位为真(单'位'显示时间结束),则执行以下任务
{
DisplayFlag=FALSE; //清显示标志位
dis_loca=++dis_loca%SEG_Num; //先对 显示位置 加1,后对变量范围进行限制 0~(SEG_Num-1)
SEG_AllOff; //关闭所有数码管显示(位驱动)
SEG_Data=SEG_B_List[(dis_num/(uint)(Pow_Self(10,dis_loca)))%10]; //将显示内容(dis_num) 本次需显示的位(dis_loca)上的数值转成代码,并送到数据端口
SEG_En|=1<<dis_loca; //开启本次需要显示的位驱动
}
}
void main() //主函数
{
SystemInit(); //调用 系统初始化函数
while(1) //循环系统
{
TimesUpdata(); //调用 时间更新函数
Display(Sec); //调用 显示函数 显示内容为 Sec
}
}
我们从一下几点内容做一些分析:
第一:网站的美观感
用户第一次来到网站,必须给用户一个好的第一感,俗语云:好的开始是成功的一半。我们把用户体验的第一点就体现在这第一感上,这就要求网站的排版和布局、网站整体的颜色配比、网站的重要内容显示等方面做工夫,google优化,让用户第一次来到网站就已经喜欢上了这个网站,增加网站粘性,最终提高用户体验度,达到回头客的目的。
第二:网站的打开速度
现在很多国内的站长为了避免备案的问题都选择使用国外的服务器,但是国外的服务器一般在速度上是逊色于外内空间的,所以,在此建议站长尽量考虑备案,选择国内的空间,为自己的网站营造一个好的用户体验。当用户打开网站需要花费很长的时间,相信下次用户就不会再选择再来访问了,直接造成流量的流失。
第三:网站的内容质量
很多站长为了增加网站的内容,都选择采用内容采集或者抄袭网络上的其他文章,杭州网站建设,当用户来网站获取自己想要的资料和知识的时候,发现网站的内容很乱,或者网站的内容在其他地方随处可见,相信用户不会再来网站受您的忽悠了。用户更希望看到的是一些有质量的文章和知识,通过网站用户可以获取更多自己想要的东西,也许你的网站就会很自然的被列入收藏夹。这样的网站是搜索引擎喜欢的。
第四:网站的内容页设置
在文章的内容页,我们可以设置一些相关的文章,或者推荐给用户一些热门文章,杭州seo学习,增加上一篇、下一篇。引导用户点击网站的其他内容页,当用户发现推荐的文章很感兴趣,他自然会逐级的点击进去,网站的跳出率直接降低,杭州google优化,用户体验度直线上升!
第五:重点内容要显眼
比如一个推销软件下载的网站,当用户来到网站,目的就是想下载该软件,却发现首页没有下载的链接,或者链接比较不明显,这点和我们在做优化的时候,把关键词加粗显示是一样的道理,不要因为这些是小问题就不去关注,杭州谷歌优化。细节问题才是决定成败的关键。
第六:自我感知
把自己想做是网站的一名普通的访客来感知网站的建设,或者让自己的朋友和同学去访问网站,找出一些好的建议,这不失为一个好的方法。最终的目的依旧是提高网站的用户体验度。
相关的主题文章:
施瓦辛格被爆出书写艳史 妻子可能得2000万美元 杭州百度seo
农户因种销脱节无奈雇人踩烂百亩笋菜 CH-8002
巴基斯坦1封急件在邮递20年后抵达 CH191I
很简单的一个程序,我写个你吧,是要按键0-99计数还是就普通空循环延迟让他自动0-99计数?下面这个程序是按键计数,没通过译码器P0口和P2口分别接一个共阴数码管,P3^7口接一个按键。
#include <reg51h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint ms);
sbit key=P3^7;
void delay(uint n) //51系列单片机,12Mhz外接晶振的话,delay(n)就是延迟 n毫秒
{
uint i,j;
for(i=ms;i>0;i--)
for(j=120;j>0;j--);
}
void main(void)
{
uchar num=0;
P0=table[num/10];
P2=table[num%10];
while(1)
{
if(key==0)
{
delay(10); //去抖动
if(key==0)
{
num++;
if(num==100)
{
num=0;
}
P0=table[num/10];
P2=table[num%10];
while(key==0); //等待按键释放
}
}
}
}
//下面的是空循环延迟自动计数,其他都一样把主循环中的程序换一下就行了,绝对能用的,采纳吧
while(1)
{
P0=table[num/10];
P2=table[num%10];
delay(500);//
num++;
if(num==100)num=0;
}
以上就是关于用4个动态数码管显示,实现0~9999计数功能,延时为1s,用c语言。全部的内容,包括:用4个动态数码管显示,实现0~9999计数功能,延时为1s,用c语言。、求:2位数码管计数器程序,AT89S51,11.0592MHZ。、利用延时功能,实现数码管的计数功能;计数范围从0开始,一直数到99 朋友 这个程序你求到了吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)