51单片机c语言程序代码分析。本人是初学者,程序是自己写的,一直有错误。求高手赐教。还望能多给我介绍点

还望能多给我介绍点这方面的经验或建议。谢谢了。
主要是定时的那部分整不明白啊。在哪设定定时器的中断介入。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dux=P2^6;
sbit wex=P2^7;
uint a,z,numw,numd;
void init();
void delay (uint z);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,};
//0x7f,0x6f,0x77,0x7c,
//0x39,0x5e,0x79,0x71};
uchar code tablew[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
void main()
{
init();
while(1)
{
//delay(z=500);
//a++;
if(a==20)
{
a=0;
wex=1;
P0=tablew[numw];
wex=0;
numw++;
if(numw==8)
{
numw=0;
}

dux=1;
P0=table[numd];
dux=0;
numd++;
if(numd==8)
{
numd=0;
}
}
}

}
void init()
{
a=0;
numd=0;
numw=0;
//wex=0xfe;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;//开定时器中断
TR0=1;
TR1=1;

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}

第1个回答  2012-02-19
没看到定时中断子函数?你写成外中断了。
void t0int() interrupt 1
{
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   a++;
}
还有,你的显示部分好像也写得不对,1秒钟才显示一位,应该是闪一下就没了。追问

谢谢你回答我的问题,我想细问一下那个显示的问题。怎么利用定时器中断延时显示啊?

追答

为什么 要用定时中断延时显示呢?显示延时只要1ms就够了,还是用循环延时就好了吧。

第2个回答  2012-02-19
中断号没搞对
void exter0() interrupt 0
如果是定时器中断的话要改为:
void exter0() interrupt 1
第3个回答  2012-02-21
刚才拿keil debug了一下你的程序。因为你在主函数里注释了delay和a++,以造成了a一直为0啊。我不知道你的硬件是什么,还有你写的这个程序是要实现什么功能呢?我编译了你上面的那个程序,能通过啊,就是只有1个warning。 如果把注释去了,warning 消失,注释了delay(),就是没用上该函数,所以才有一个警告的。你说说你程序的具体表现。
第4个回答  2012-04-20
建议你去看网络教学视频

C程序出现了错误,调试了很多遍没成功,求高手赐教,程序功能:座号抽奖...
应为:if(x[i]==x[j])

C\/C++问题,菜鸟求教。刚学文件操作。望高手赐教:(满意者额外加20~50...
1.这个警告是因为 fp=fopen("E:\\mydata.txt","w");行中的E:\\my。。。引起的,因为\\在c语言中是转义标识符,所以\\m被警告了(因为不存在\\m),2.因为不存在\\m所以出现了警告 3.如何消除呢?需要取消\\的特殊含义,采用\\\\即可 4.想避免类似的问题,只能打好扎实的基础。。。多学多练,没...

...\/)\\s{1,2}"这是我写的 但是测试程序有问题 求高手赐教!
加转义字符,"\\\\d{1,2}\/)\\\\s{1,2}"

怎样提升自己单片机C语言编程能力啊?求高手指点迷津!我硬件也懂一点 但...
2、源程序中多些注释:比如函数的功能描述、入口参数说明、返回值说明、调用的要求、完成日期等。另外,关键算法的说明也应该注释。常言道:好记忆不如烂笔头,不能太过相信自己的智商。3、工程化管理源程序:比如对一些常数、接口地址、数据类型定义(typedef)、数据结构定义、自定义的函数声明等,应写入单...

51单片机键盘矩阵扫描代码的理解
本人是学C的,但还看得懂汇编语言。MOV P2,A 是把扫描码赋给P2口,其实是赋给P2口的低四位,进行扫描;MOV A,P2 是读取P2口的值,后面一句把低四位屏蔽了,最终还是读取了高四位

关于如何学编程,请现在是程序员的你们来说说你们当初是怎么学习的?
%D%A第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 %D%A第二:C语言能够让你深入系统底层,你知道的操作系统,哪一个不是C语言写的?所有的windows,Unix,Linux,Mac,os\/2...

用C语言来编写两个线性表合并为一个线性表的程序,初学者,不太会...
一开始的思路:把A、B都丢进C里,然后对C排序。人们一开始想到的总是最懒的办法,往往是最没效率的。改进:由于A、B是排好序的,先把A丢进C里,再拿B元素一个个往里查找插入。这么做要频繁移动元素,如果线性表不是链表的话,开销很大。再改进:从A、B中各拿一个元素出来,比较后把小的放进...

当程序运行时出现内存错误是什么原因呢,应该怎么改,望高手赐教
如果内存条金手指接触良好,可以到华军软件园下载:内存不能为read修复工具。我的电脑也出现过,修复好后用了一段时间又出现了,干脆重做了系统。

vba 程序错误 求高手赐教 帮我改正确
错误1 1不能做变量 请在前面加个字母 如 Dim a, a1, i As Integer 错误2 7 错误的使用了单引号和中文逗号 修改为 b=InputBox("请输入密钥(三位数)","请输入密钥")错误 3 4 5 把1 改为 a1 错误6 8 9 10 11 请使用=号 不要使用中文二代替 ...

...想更换店名!不过一直没有好的创意,求高手赐教
酷袜屋

相似回答