📄 juchibo.c
字号:
////////////////////////////////
// 实验要求:
// 1 生成后锯齿波
// 2 后沿点亮P6口LED灯
// 3 数显周期
///////////////////////////////
#pragma sfr //使用特殊功能寄存器
#pragma interrupt INTTM1 inter RB1 //定义INTMM1可屏蔽中断服务程序
#pragma DI //定义关中断
#pragma EI //定义开中断
#pragma access //使用了存储器直接地址存取功能
#pragma realregister //使用了寄存器直接存取功能
#define MMODE 0x0 //MM设置为单片模式
#define CMODE 0x1 //起振模式选择寄存器设置为不使用分频电路
#define PCMODE 0x0 //处理器时钟控制寄存器PC设置cpu时钟为0.4us
#define PORTM6 0x0 //端口P6设置为输出模式
#define MDAM 0X1 //D/A转换器设置为通常模式,通道0转换动作许可,通道1禁止
#define TCL1MODE 0xa //选择定时器1计数时钟为78.1KHz
#define TMC1MODE 0x1 //设置8位定时器1动作许可
#define N 3905 //定时时间计数值 3905/78.1=50ms
#define FREQ 78 //定时器时钟频率
#define STEP 5 //定义数字量0~255步长为5
#define DELAY 30 //定义延时数值
void inter(void); //中断子程序
void pre_deplay(); //计算锯齿波周期子程序
void deplay(); //显示周期子程序
//定义字符0-9的显示码
unsigned char numbercode[10]
={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19};
//定义数码管选择
unsigned char fa02_buff[4]
={0x0e,0x0d,0x0b,0x07};
unsigned char fa03_buff[4]; //定义4个数码管的缓存区
pre_deplay(); //计算周期,并为周期显示作准备
P6 = 0x0; //P6口清零
unsigned char a;
void main()
{
while(1)
{
for(a = 0; a <= 0xff; a = a+STEP)
{
DI(); //关中断
TCL1 = TCL1MODE; //定时器1计数时钟为78.1KHz
CR10 = N; //定时时间计数值 3905/78.1=50ms
TMMK1 = 0; //8位定时器1中断允许
TMC1 = TMC1MODE; //定时器1启动
EI(); //开中断
while(1){} //等待中断--D/A转换
if(a == 0xff)
P6 = 0xff; //锯齿波后沿点亮P6口LED灯
if(a != 0xff && a > 100)
P6 = 0x0; //P6口LED灯延时一段时间后清零
}//for
}//while
}//main
void inter(void)
{
DI(); //关中断,防止在这期间另有中断干扰
DACS0 = a; //将待转化a值赋给D/A转换寄存器
deplay();
//每显示一个周期的波形,就显示一次周期
}
//计算周期,并为周期显示作准备
void pre_deplay()
{
int i,j,k;
i = N/FREQ; //每步所花时间
j = 255/STEP; //步数
k = i*j; //一个周期的时间
fa03_buff[0] = k/1000; //周期的千位
fa03_buff[1] = (k/100)%10; //百位
fa03_buff[2] = (k%100)/10; //十位
fa03_buff[3] = k%10; //个位
}
//数码管显示
void deplay()
{
unsigned int n,dp = 0;
while(dp < 4)
{
pokeb(0xfa02,fa02_buff[bp]);
pokeb(0xfa03,numbercode[fa03_buff[bp]]); //数码管显示
//延时
n = 0;
while(n < DELAY)
{n++};
pokeb(0xfa02,0xff);
pokeb(0xfa03,0xff); //数码管关闭
//延时
n = 0;
while(n < DELAY)
{n++};
dp++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -