- 阅读权限
- 150
- UID
- 7
- 帖子
- 140
- 精华
- 0
- 注册时间
- 2013-2-26
- 在线时间
- 20 小时
- UID
- 7
- 帖子
- 140
- 精华
- 0
- 注册时间
- 2013-2-26
- 在线时间
- 20 小时
|
程序如下:
'////////////////////////////////////////////////////////
'/// 目 的:LED上显示99-0的百分数,按秒加1递减, ///
'/// 从OC1A输出相应占空比为99-0%的PWM信号 ///
'/// 实 验 板:M16/32精品板V3.0 ///
'/// 编 译 器:BASCOM-1.11.8.2 ///
'/// 文 件 名:BCD-PWM2.BAS ///
'/// 日 期:2006年11月2日 ///
'/// 作 者:铜河 ///
'/// 编译情况:通过,364 words ///
'/// 联线情况:J46-12,J17-12,波形输出PD5 ///
'////////////////////////////////////////////////////////
$regfile "m16def.dat" '使用CPU为M16
$crystal = 7372800 '晶体频率
Config Timer0 = Timer , Prescale = 1024 'T0用于定时,分频系数为1024,产生1秒信号
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 8 'T1用于产生PWM,8位精度,常规
Config Timer2 = Timer , Async = Off , Prescale = 64 'T2用于扫描显示,时间2MS
On Ovf0 Tim0_isr '声明Timer0中断
On Ovf2 Tim2_isr '声明Timer2中断
Enable Ovf0 '允许定时器0中断
Enable Ovf2 '允许定时器2中断
Enable Interrupts '允许全局中断
Start Timer0 '启动Timer0
Start Timer1 '启动Timer1
Start Timer2 '启动Timer2
Ddrd = &B00110000 '定义PWM口为输出端
Ddrc = 255 '定义接LED的C口为输出
Ddrb = Ddrb Or &B11000000 '定义位扫描控制为输出
Dim A As Byte , B As Byte , I As Byte , E As Byte '定义BCD变化数据,A为十位,B为个位
Dim A1 As Byte , B1 As Byte
Dim C As Word , D As Word '定义转换变量及计时参数
Dim M As Bit '定义PWM变化标志位
Dim N As Bit '定义扫描显示标志
Dim S(3) As Byte '定义扫描显示的位数据
Dim X(16) As Byte '定义LED显示字符表
Restore Daima
For I = 0 To 15
Read X(i)
Next I
A = 0 '初始值为0
B = 0
M = 1
Set N
Do
If M = 1 Then '如果M=1,表示0-99有变化
Reset M 'M清0,等待下一次变化
S(1) = X(b) '查个位显示码
S(2) = X(a) '查十位显示码
C = A * 10
C = C + B '将2位0-99的百分比BCD码转换为一字节数
D = C * 255
D = D / 100
Pwm1a = D '转换后的数据从PWM输出
End If
Loop
'//////////////定时器0中断服务程序///////////////
Tim0_isr: 'timer0中断服务
Load Timer0 , 125 '重装初值
If E >= 50 Then '软件计数到40为1秒
E = 0
Set M '置数据变化标志
B = B - 1 '每秒占空比增加1
If B >= 10 Then
B = 9
A = A - 1 '十进制进位
If A >= 10 Then A = 9
End If
End If
E = E + 1
Return '中断服务程序结束
'//////////////定时器2中断服务程序//////////////
Tim2_isr: 'timer2比较匹配中断服务
Load Timer2 , 250
If N = 0 Then
Portc = S(1)
Set Portb.7 : Reset Portb.6 '显示个位
Set N
Else
Portc = S(2)
Reset Portb.7 : Set Portb.6 '显示十位
Reset N
End If
Return '中断服务程序结束
'///////////////LED数码管显示代码///////////////
Daima:
Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8
Data &H80 , &H90 , &H88 , &H83 , &HC6 , &HA1 , &H86 , &H8E
|
|