#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//设定四个按键
sbit X9C102=P2^0
sbit X9C202=P2^1
sbit X9C302=P2^2
sbit X9C402=P2^3
sbit X9C103_CS=P1^0
sbit X9C103_INC=P1^1
sbit X9C103_UD=P1^2
void delay_nus(uint i)
{
while(i--)
}
void delay_nms(uchar i)
{
for(ii>0i++)
{
delay_nus(1000)
}
}
void set_x9c103(uchar num,uchar ud,uchar save)
{
X9C103_CS=0
delay_nus(1)
if(ud==1)
{
X9C103_UD=1
}
else
{
X9C103_UD=0
}
delay_nus(4)
for(numnum>0num--)
{
X9C103_INC=1
delay_nus(2)
X9C103_INC=0
delay_nus(2)
}
delay_nus(2)
if(save==1)
{
X9C103_INC=1
delay_nus(2)
X9C103_CS=1
delay_nms(22)
}
X9C103_CS=1
delay_nus(10)
}
void clear_down()
{
set_x9c103(100,0,1)
}
void main_init()
{
X9C103_CS=0
clear_down()
}
void main()
{
main_init()
set_x9c103(70,1,1)
while(1)//扫描按键,对应不同倍数的输出
{
if (X9C102==0){
clear_down()
set_x9c103(10,1,1)}
if (X9C202==0){
clear_down()
set_x9c103(30,1,1)}
if (X9C302==0){
clear_down()
set_x9c103(60,1,1)}
if (X9C402==0){
clear_down()
set_x9c103(90,1,1)}
}
}
你好:如果你想直接知道答案,那么我告诉你,12MHz晶振:
void delayms(unsigned int t)
{
unsigned int i,j
for(i=ti>0i--)
for(j=123j>0j--)
}
能精确到1ms。
如果是11.0592MHz晶振,只需把上面的“j=123”改为“j=114”,都是调试过的,没问题。
然后你要想知道是怎么调试的,很简单,打开uv2编程软件,在最上边的工具栏里边有个“Debug”,点击后出现下拉菜单,选择第一个“start/stop Debug Session”,然后在最右边有一个Watch栏,有两个项目,一个是“Register”,一个是“value”,然后在“Register”栏下边的“Sys”里边有个“sec”,你只要单击“Step over”运行程序并观察“sec”的值就能调试出你程序的执行时间了。
注意,一定要先选择晶振频率,不然会默认24MHz。
希望我的回答能帮助到你。
声明定义:
void delaynms(int n) //n: millisecond{
int i,j
for(i=0i<ni++)
for(int j=0j<500)
}
调用:
delaynms(500) //delay 0.5 second